Registriert seit: 7. Aug 2007
113 Beiträge
|
Re: Threadproblem - sleep(1) braucht ca. 5 ms! Warum ?
18. Jul 2008, 11:43
Das Sleep gibt die Ausführung des Threads an den Windows Scheduler ab. Ich hatte vor einer Zeit mal gemessen wie lange ein sleep(1) wirklich braucht und dort kamen Werte von 0.95 bis 1.95 raus. Allerdings hatte mein System auch überhaupt keine Last! Ich vermute fast, dass bei deinem System dann aber gerade etwas gemacht wird und der Thread dann vom Sheduler nach hinten gestellt wird. Dann dauerts länger als 1 Millisekunde. Bei einem Sleep(0) wird der Scheduler "angewiesen" zu schauen ob jemand anderes auch etwas machen will. Wenn dies nicht der Fall ist, dann kehrt der Sleep Befehl sofort zurück anderenfalls kann auch dieser 2-3 Millisekunden dauern.
Ich denke es könnte schon helfen, wenn du die Priorität des Threads um eine oder zwei Stufen erhöhst. Denn dann wird der Scheduler deinen Messthread nicht hinter andere Stellen. Allerdings sollte so etwas sehr gut überlegt sein!
Wobei sich mir die Frage stellt worauf legst du da Priorität. Beim Daten messen (also, dass immer im selben Zeitabstand gemessen wird)? Oder müssen die Daten auch immer sofort ausgewertet werden? Also die gemessen ergebnisse dürften nicht gecacht werden, weil das keinen Sinn machen würde.
Denn wenn du die Daten Messen und sofort auswerten musst könntest du dir evtl einen Thread sparen. Wenn es "egal" ist, wann die Daten ausgewertet werden, dann liegt die Prio ja ganz klar beim Messen. Evtl könntest du auch etwas anderes zum Warten benutzen. So etwas wie Events (nicht TNotifyEvent) warten bis ein Timeout eintrifft oder das Event gesetzt wird. Das könnte auch schon nach 0.5 Millisekunden der Fall sein. Halt wann der Gegenpart das Event setzt.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
|