Programm pausieren
-
Wenn ich mein Programm mit der Windows-Funktion Sleep(x) pausieren will, dann funktioniert das zwar ganz gut, aber es ist zu ungenau. Die Funktion nimmt leider nur Pausen im Bereich von ~30 Millisekunden an. Gibt es da nicht etwas, das ein bisschen genauer (auf ca. 3 Millisekunden) geht?
-
QueryPerformanceCounter
-
Ähm, ich will nicht eine möglichst genaue Zeit. Ich will eine Pause.
-
dann musst du in einer while-Schleife solange Zeit "verbraten", bis die 3 ms um sind - sicher kannst du aber auch da nie sein, dass dein Thread nicht von Windows kurz lahm gelegt wird

-
Wofür brauchst du das überhaupt?
-
flenders schrieb:
dann musst du in einer while-Schleife solange Zeit "verbraten", bis die 3 ms um sind - sicher kannst du aber auch da nie sein, dass dein Thread nicht von Windows kurz lahm gelegt wird

Und wie mache ich das am besten? Immerhin sollte es auf jedem PC gleich lange dauern.
Außerdem würde bei einer while-Schleife die Prozessorauslastung immer auf 100% steigen, was nicht gerade sehr ökologisch ist. Ich dachte da eher an eine Stilllegung des kompletten Threads.
-
Stichwort: Multimedia-Timer
U.a. timeBeginPeriod (...) in der mmsystem.h plus passende *.lib
Ist auf eine Millisekunde genau. Kann aber nur in max. 16 Instanzen laufen!
Blackbird
-
Also bei einer Stilllegung des Thread erhöht sich afaik eigentlich fast zwangsläufig die Ungenauigkeit

-
Das problem hatte ich auch mal. Die beste Lösung die ich dafür gefunden habe ist:
void Schlafe(int was) { HANDLE warte = CreateEvent(NULL, FALSE, FALSE, NULL); WaitForSingleObject(warte, was); }Die zieht auch keine CPULast. Wenn jemand ne bessere Lösung kennt, würde ich die gerne hören.
