thread sauber schliessen



  • Hallo, ich will einen thread sauber schliessen und ihn neu starten. Ich erstelle den thread mit:

    HANDLE testthreadhandle
    DWORD testthreadid
    ...
    testthreadhandle=::CreateThread(NULL, 0 , threadfunc, 0, &testthreadid);
    ...
    
    DWORD WINAPI testthreadid{
    ...
    return 0;
    }
    

    Nun will ich den thread nochmals neu starten. Muss ich dann überhaupt vorher n CloseHandle auf testthreadhandle machen. Oder kann ich irgendwie überprüfen ob der thread abgelaufen ist und dem testthreadhandle erneut ein createthread zuweisen?

    Bzw. gibt es ein Event ect auf das ich warten kann bis der thread zuende ist, damit ich ihn neustarten kann?



  • In der Doku steht's so:

    MS schrieb:

    The thread object remains in the system until the thread has terminated and all handles to it have been closed through a call to CloseHandle.

    (http://msdn.microsoft.com/en-us/library/ms682453(VS.85).aspx)

    Also ja, du solltest lieber CloseHandle ausführen.

    Den Status des Threads (läuft er noch?) prüfen kannst du mit GetExitCodeThread.

    EDIT: Du kannst übrigens auch sehr bequem auf Beendigung des Threads mit WaitForSingleObject (oder bei mehreren WaitForMultipleObject) warten. Ich benutze das immer bei mit _beginthread(ex) erzeugten Threads. Ich vermute, dass du stattdessen auch die Handles von CreateThread verwenden kannst (informier dich da bei Interesse mal).

    Und noch was Wichtiges zu CreateThread und warum _beginthread(ex) besser ist:
    http://blog.m-ri.de/index.php/2007/11/28/createthread-und-die-crt/



  • scheint zu funktionieren. Ja also ich Closedas Handle auch beim exit des programms.

    ich nutze WaitforSingleobject(Handle vom thread), funktiert bis jetzt. ICh teste das mal weiter aus.

    Wartet er hier denn darauf das die threadfunc endet?


Anmelden zum Antworten