Thread unterbrechen
-
Hallo,
wie kann ich Threads die gerade eine Schleife durschlaufen, in dieser Schleife stoppen (Thread-Arbeit beenden) wenn sie ein Stop-event vom Main() erhalten.
for(int i=0;i<10;i++){ EnterCriticalSection(&cs_console); cout << "Thread: " << Daten->ID << endl; LeaveCriticalSection(&cs_console); cout << i << endl;Sleep(100); if(WaitForSingleObject(StopEvent,10000)){cout << "Thread beendet"<< endl;break;}//funktioniert nicht } SetEvent(StartEvent); //Events freigeben/zurücksetzen SetEvent(StopEvent);
-
CreateEvent,OpenEvent,SetEvent und WaitForSingleObject
Findet sich alles in der MSDN und ist eigentlich recht simpel, einfach mal nachschauen.
-
Willst Du den Thread "Unterbrechen" oder Terminieren?
SuspendThread
Oder auf ein Event warten^^Oder auf eine Atomic Threadstable variable zurückgreifen...
grüße
-
SuspendThreead ist böse!
http://blog.kalmbachnet.de/?postid=6
http://blog.kalmbachnet.de/?postid=16
-
Ja,.. suspend ist nicht gerade das beste,..
aber das stichwort war "Unterbrechen"
-
"TerminateThread" ist _genauso_ böse wie "SuspendThread"!
-
cc++ schrieb:
if(WaitForSingleObject(StopEvent,10000)){cout << "Thread beendet"<< endl;break;}//funktioniert nicht
Du musst korrekterweise abfragen, ob das Event-Signalisiert wurde... siehe Hilfe zu WaitForSingleObject