Threads kontrollieren beenden?
-
Hallo
ich hab es neuerdings mit Threads zu tun, und kennen dazu sonst nur die Theorie aus Java, die in C++ und windows sicherlich auch anwendung findet.
Man soll ja Threads nicht einfach eiskalt mit TerminateThread killen, aber wie kann ich die den kontrolliert beenden?
Meine Threads rennen in einem endlos Loop, die höhren von alleine eigentlich nicht auf.
-
Du musst dafür sorgen dass sie nicht in einer Endlosschleife landen und sich selbst beenden. Sind sie erstmal in einer Endlosschleife kann man sie nicht mehr kontrolliert beenden sondern nur noch töten.
Edit: Du kannst in der Schleife regelmäßig eine Variable abfragen. Du baust dir ein volatile int threadsolllaufen = 1 und ein while(threadsolllaufen) //thread tu was.
Dann setzt du irgenwann threadsolllaufen auf 0 und dein Thread sollte sich beenden.
-
Ein "einfaches" Beispiel, wie man es richtig macht:
#include <windows.h> #include <tchar.h> #include <stdio.h> #include <process.h> #include <conio.h> typedef struct MyThreadData { MyThreadData() { hEndEvent = CreateEvent(NULL, FALSE, FALSE, NULL); } ~MyThreadData() { CloseHandle(hEndEvent); } HANDLE hEndEvent; // TODO: Additional Data... } MyThreadData; unsigned WINAPI MyThread(void *p) { MyThreadData *pData = (MyThreadData*) p; printf("\nThread started..."); while(WaitForSingleObject(pData->hEndEvent, 100) == WAIT_TIMEOUT) { // Do some work... } // Terminate... printf("\nThread is terminating..."); return 0; } int _tmain() { MyThreadData *pThreadData = new MyThreadData(); printf("\nStarting thread..."); HANDLE hThread = (HANDLE) _beginthreadex(NULL, 0, &MyThread, pThreadData, 0, NULL); // Do some work... printf("\nPress any key to terminate thread and process..."); _getch(); // Ok, here we want to "correctly" terminate our thread: printf("\nTerminating thread..."); SetEvent(pThreadData->hEndEvent); WaitForSingleObject(hThread, INFINITE); delete pThreadData; printf("\nTerminating program..."); return 0; }PS: Verbesserungsvorschläge werden gerne angenommen...