Thread, Sleep und Programm beenden
-
Hallo zusammen,
ich möchte einen Thread realisieren, der eine Aktion ausführt und sich dann schlafen legt. Die Sleep-Zeit kann vom Benutzer eingestellt werden und kann durchaus einige Minuten betragen. Das ganze läuft als while-Schleife:
UINT CApplication::Thread(LPVOID lParam) { bool *bContinue = (bool*)lParam; while (*bContinue) { //Aktion... ::Sleep(10000); } return 0; }Wird nun das Programm beendet, sorgt folgender Aufruf dafür, dass der Thread ordnungsgemäß beendet wird:
bContinue = false; HANDLE hThread = m_pMyThread->m_hThread; ::WaitForSingleObject(hThread, INFINITE);Das Problem ist, dass das Beenden nun sehr lange dauert, je nach eingestellter sleep-Zeit und wieviel von dieser schon abgelaufen ist.
Eine mögliche Lösung wäre die Realisierung von zwei Sleep-Aufrufen, um öfter nachzuschauen, ob bContinue noch true ist. Das Problem ist hierbei, dass die tatsächliche Zeit nicht mehr der eingestellten entspricht bei starker Systemauslastung, oder?
Welche Möglichkeiten gibt es?
Viele Grüße
-
du könntest 'SleepEx()' benutzen. das kann man mittendrin abbrechen.
guckst du: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/sleepex.asp
-
Ah, vielen Dank. Genau so etwas hatte ich gesucht.
Grüße