Berechnungen und Ausgaben an Zeitpunkte koppeln
Berechnungen und Ausgaben an Zeitpunkte koppeln
Wie koppelt man Berechnungen und Ausgaben an Zeitpunkte?
In regelmäßigen Abständen z.B. 25 mal pro Sekunde möchte ich bestimmte Berechnungen durchführen lassen und entsprechendes ausgeben. Dazu habe ich eine Prozedur an ein auslösendes Ereignis gekoppelt, und darin die Berechnungen, die Ausgabe und einen Delay in eine Schleife gesteckt. Das Problem ist: An der Ausgabe ändert sich erst etwas, wenn die gesamte Prozedur beendet ist. Die Ausgabe gibt dann korrekt denn letzten Stand wieder. Die Zwischenstände werde aber nicht live ausgegeben, obwohl es in der Schleife so vorgesehen ist. Wie behebe ich das Problem?
In regelmäßigen Abständen z.B. 25 mal pro Sekunde möchte ich bestimmte Berechnungen durchführen lassen und entsprechendes ausgeben. Dazu habe ich eine Prozedur an ein auslösendes Ereignis gekoppelt, und darin die Berechnungen, die Ausgabe und einen Delay in eine Schleife gesteckt. Das Problem ist: An der Ausgabe ändert sich erst etwas, wenn die gesamte Prozedur beendet ist. Die Ausgabe gibt dann korrekt denn letzten Stand wieder. Die Zwischenstände werde aber nicht live ausgegeben, obwohl es in der Schleife so vorgesehen ist. Wie behebe ich das Problem?
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Berechnungen und Ausgaben an Zeitpunkte koppeln
Es ist zu ungenau beschrieben was du letztendlich vorhast aber normal lässt man Berechnungen nicht einfach beliebig oft wiederholen. Man berechnet gewöhnlich nur einmal und lässt erst neu berechnen wenn sich die Eingangsdaten ändern.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
Re: Berechnungen und Ausgaben an Zeitpunkte koppeln
Application.Processmessages
Re: Berechnungen und Ausgaben an Zeitpunkte koppeln
Da sich manche Daten auch von alleine ändern, wie sich z. B. auch die Erde alleine um die Sonne dreht, bedarf es manchmal ständig neuer Berechnungen.u-boot hat geschrieben:Es ist zu ungenau beschrieben was du letztendlich vorhast aber normal lässt man Berechnungen nicht einfach beliebig oft wiederholen. Man berechnet gewöhnlich nur einmal und lässt erst neu berechnen wenn sich die Eingangsdaten ändern.
Danke, funktioniert.theo hat geschrieben:Application.Processmessages
Gibt es vielleicht noch eine Möglichkeit, dass ganze ohne Delay(); zu lösen? Es ist ja durchaus möglich, dass die Berechnungen eine nicht zu vernachlässigende Zeit in Anspruch nehmen, sodass der Abstand zwischen den einzelnen Berechnungen nicht der Länge des Delays entspricht.
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Berechnungen und Ausgaben an Zeitpunkte koppeln
Lässt sich auch mit Delay prüfen.
Du machst vor der Berechnung
und dann steht in x wielange du gerechnet hast . In TTime , d.h. das 1 Tag = 1 ist 1 Stunde ist 1/24 , 1 Minute ist 1/24/60 ,...
Jetzt kannst du einfach x von der standartdelay Zeit abrechnen:
Delay(25-round(x*86400));
naja und wenn x > 25 ist ist der pc zu lahm...
Du machst vor der Berechnung
Code: Alles auswählen
var
vorher:TTime;
x:integer;
begin
vorher := now;
//rechne rechne rechne
x := now-vorher;
//...
end;
Jetzt kannst du einfach x von der standartdelay Zeit abrechnen:
Delay(25-round(x*86400));
naja und wenn x > 25 ist ist der pc zu lahm...
Zuletzt geändert von Lori am Mo 15. Nov 2010, 20:27, insgesamt 1-mal geändert.
Grund: Highlighter
Grund: Highlighter
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Berechnungen und Ausgaben an Zeitpunkte koppeln
Selbst die Änderungen der Erdposition könnte man als Event deklarieren.400kmh hat geschrieben: Da sich manche Daten auch von alleine ändern, wie sich z. B. auch die Erde alleine um die Sonne dreht, bedarf es manchmal ständig neuer Berechnungen.

Aber mal zurück zu dem was du wolltest. Ich bin eher ein Freund von Gettickcount als von TTimer. Gerüchte besagen gettickcount hat eine genauigkeit von ca. 30 ms. Was nun genauer oder schneller ist weiss ich auch nicht Bei Sachen die mit 25 Hz laufen könnte die Ungenauigkeit schon ein Problemchen werden... Die Ausgabe kann auch Zeitraubend werden, falls diese wirklich so oft passieren soll.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
Re: Berechnungen und Ausgaben an Zeitpunkte koppeln
Anderes Beispiel: Ein Auto fährt von A nach B. Die Geschwindigkeit verändert sich auch (verlangsamt sich), wenn man nicht die Taste für Gasgeben drückt. Hier müssen ständig Berechnungen durchgeführt werden.u-boot hat geschrieben:Selbst die Änderungen der Erdposition könnte man als Event deklarieren.
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Berechnungen und Ausgaben an Zeitpunkte koppeln
Unterschreitet das Auto eine gewisse Geschwindigkeit wird ein Event ausgelöst gas zu geben400kmh hat geschrieben:Anderes Beispiel: Ein Auto fährt von A nach B. Die Geschwindigkeit verändert sich auch (verlangsamt sich), wenn man nicht die Taste für Gasgeben drückt. Hier müssen ständig Berechnungen durchgeführt werden.

Ich sehe die Geschichte mit dem Event als kleine Schleife (Abfrage) die bei Bedarf eine größere Berechnung/Prozedur auslöst.
Gut wir könnten uns nun drüber streiten, ob es sinnvoll ist alles als Event zu sehen, oder ob man manchmal lieber drauf verzichtet und dann sowieso dann die Berechnung laufen lässt.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)