Sleep unterbrechen?



  • Hallo,
    ich hab eine Frage. Ist es möglich Sleep zu unterbrechen? Weil ich möchte eine bestimmte zeit abwarten, aber dem User soll auch gestattet sein dieses Warten zu unterbrechen



  • dann nimm doch SetTimer und warte bis WM_TIMER an dein Fenster kommt, und trotzdem kannst du noch auf usernachrichten reagieren



  • ne eigentlich ist das Sleep ja in einem Thread
    in etwa so:

    int x=0;
    While(x<=15000 && !ende)
    {
    x++;
    Sleep(1);
    }
    wen ende auf true gestellt wird soll die schleife verlassen werden. doch leider stimmt die Zeit mit dieser Methode nicht mehr.



  • Wenn du es schon auf diese Weise machen willst, solltest du größere Intervalle von z.B. 50 oder 100ms nehmen, weil dein Sleep(1) mit hoher Wahrscheinlichkeit länger als eine Millisekunde dauert, da das ganze wegen Multithreading und Overhead für den Funktionsaufruf ein nichtdeterministischer Vorgang ist.



  • mfc schrieb:

    wen ende auf true gestellt wird soll die schleife verlassen werden. doch leider stimmt die Zeit mit dieser Methode nicht mehr.

    Theoretisch kann Sleep eine Millisekunde warten, praktisch hat Sleep aber eine grössere Auflösung. Ich würde hier mit Zeitstempeln arbeiten, GetTickCount oder TimeGetTime liefern zB solche.

    DWORD start = GetTickCount();
    while (GetTickCount() < start + 15000 && !ende)
    {
        Sleep(0);
    }
    

    Aufpassen musst du nur, wenn der Zeitwert von GetTickCount "überläuft".



  • Du könntest dir auch ein "Abbruch-Event" erstellen und darauf dann mit WaitForSingleObject die gewünschte Zeit warten - durch aktivieren des Events kannst du dann die Warte-Zeit abbrechen 😉


Anmelden zum Antworten