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


Anmelden zum Antworten