Herausbekommen, ob der Thread noch läuft



  • Hi Leute,

    ich habe einen Thread von CWinThread abgeleitet und möchte nun während meine Anwendung läuft abfragen, ob der Thread aktiv ist.

    Wie muss ich das anstellen?

    Danke im voraus für Eure Hilfe.

    Grüsse
    xthing



  • ungefähr so:

    if (WaitForSingleObject (thread->m_hThread, 0) != WAIT_OBJECT_0)
    {
      // thread läuft noch
    }
    

  • Mod

    Aber achtung! Das geht nur wenn das CWinThread Objekt nicht auf auto delete steht. Ansonsten entsorgt sich das CWinThread beim Beenden des Threads selber. Der Zeiger wird dann ungültig. Zudem verweist WaitForSingleObject dann auf ein Handle, dass zwar signalisiert wird aber anschließend ungültig ist weil der CWinThread auch das Handle schliesst!



  • Fazit: Es geht nur, wenn Du "m_bAutoDelete" explizit auf "false gesetzt hast! Und das geht wiederum nur zuverlässig, wenn Du den Thread "suspended" erzeugst und dann "m_bAutotDelete" auf "false" setzt; erst dann den Thread starten (ResumeThread)!
    Dann kannst Du auch zuverlässig auf das Handle warten (oder es mit einem Timeout von 0 abfragen; verwende bitte nicht "GetExitCodeThread).



  • So eine Abfrage macht eh keinen Sinn.


  • Mod

    Jochen Kalmbach schrieb:

    Und das geht wiederum nur zuverlässig, wenn Du den Thread "suspended" erzeugst und dann "m_bAutotDelete" auf "false" setzt; erst dann den Thread starten (ResumeThread)!

    Es geht auch über den Konstruktor des Objektes, wenn man eine CWinThread Klasse verwendet.
    Und es geht auch, wenn man in der Threadfunktion sich den Threadzeiger besorgt und m_bAutoDelete auf FALSE setzt.

    In alen anderen Fehlerfällen wird kein Thread erzeugt und die Funktion AfxBeginThread returniert einen NULL Zeiger oder der startende Thread wirft eine Exception.


Anmelden zum Antworten