Hallo,
jfheins schrieb:
Zitat:
Du wirst nie, nie eine Pause von 1 ms Sekunde hinbekommen, wenn du Sleep o.ä. benutzt Wink
... ja ich weiß, ich benötige auch 1s, nicht 1ms, wobei ein Fehler von 20ms in meinem Fall nicht tragisch wäre.
Hagens (negaH) Routine mit MsgWaitForMultipleObjects habe ich in einem anderen Projekt schon mal erfolgreich eingesetzt, danke übrigens. Dort kommuniziere ich alle 20ms mit einem an USB angeschlossenem Gerät und stelle Parameterdaten und Diagramm am PC dar. Das funktioniert sehr gut. Zuerst hatte ich das über TTimer realisiert, allerdings macht bei 20ms der Timer-Event Probleme, der erfolgt nämlich nicht so schnell, das liegt wohl am Zeitscheibenmodell von Windows.
negaH schrieb:
Zitat:
Nehme einen TTimer, setze .Enabled auf False, dann .Interval auf X Millisekunden Warteseit, und dann .Enabled wieder auf True. Dann läuft deine Anwendung so weiter wi gewohnt und nach X Millisekunden lösst der TTimer ein Event aus. Innerhalb dessen dann .Enabled auf False setzen und die jeweilige Aktion ausführen.
So wie ich dich verstehe, den Timer im Hauptthread einstellen und aktivieren. Dann im Hauptthread im Prinzip "schlafen" gehen, das heisst zum Beispiel einen OnButtonPress-Event o.ä. beenden.
Die eigentliche Routine erfolgt dann nach dem eingestellten TimerIntervall und wird in OnTimer-EreignisRoutine ausgeführt, wobei man zuvor den Timer deaktiviert und nach der Routine wieder aktiviert, wenn die Routine periodisch aufgerufen werden soll. Ich probiere das mal aus, und beobachte, wie sich das bei hoher Systembelastung verhält.
Gruß
Seven
Mein Kindheitstraum: Die 32bit Farbpalette als Bundstiftsammlung.