Thread Management
-
du darfst den 1. Thread nicht per TerminateThread beenden, sondern anders...
-
und wie?
-
Ein Thread beendet wenn seine ThreadProc returned. Wenn du willst dass ein Thread beendet dann musst du also dafür sorgen dass seine ThreadProc returned, fertig.
-
ja schon klar aber ich hab ja aus dem thread z.b. 5 weitere threads gestartet wie kann ich jetzt die beenen?
-
CreateEvent, SetEvent, WaitForSingleObject
-
spike1993 schrieb:
ja schon klar aber ich hab ja aus dem thread z.b. 5 weitere threads gestartet wie kann ich jetzt die beenen?
Indem du denen irgendwie ein Signal gibst dass sie beenden sollen. Stichwort Synchronisation und so: http://msdn.microsoft.com/en-us/library/ms686689.aspx
-
hätte es mit bool schon versucht aber da gibts sicher ne bessere lösung
-
Vor allem ist ein einfacher bool problematisch. http://en.wikipedia.org/wiki/Race_condition#Computing
-
weis jm ne bessere lösung?
-
spike1993 schrieb:
weis jm ne bessere lösung?
Wie wärs wenn du die ganzen Links auch mal durchliest, ansonsten frag ich mich schon für was ich hier eigentlich poste. Ich geb dir noch ein paar Stichwörter: Critical Section, Atomic Operation, Mutex, Condition Variable. Und das sind jetzt nicht irgendwelche leeren Buzzwords die ich mir hier einfach mal zum Spaß aus den Fingern sauge. Wenn du dich mit Multithreading beschäftigen willst dann sind das essentielle Konzepte.
Noch ein paar Links die interessant sind:
http://de.wikipedia.org/wiki/Interprozesskommunikation
http://de.wikipedia.org/wiki/Race_Condition
http://de.wikipedia.org/wiki/Philosophenproblem
http://de.wikipedia.org/wiki/Erzeuger-Verbraucher-Problem
-
ich kriebs einfach nicht hin mit was fürn einer funktion api muss ich den handle vom thread den beenden damit auch die threads beendet werden die aus dem 1. gestartet werden.
-
Wie oft soll ichs noch sagen: Der einzige richtige Weg um einen Thread zu beenden ist dass der Thread sich selbst beendet indem er returned. Wenn du willst dass alle diese Threads beenden dann musst du dafür sorgen dass diese Threads sich beenden indem du diese Threads alle entsprechend programmierst. period.
-
hab ich auch gemacht und zwar überprüft das thread immer ob die threadid in einem anderen string enthalten ist (.find) wenn er enthalten ist dann return 2 aber es beendet sich immer nur 1 oder 2 von 3?!
-
Komisches System aber naja, wenns nicht funktioniert dann weil du was falsch gemacht hast. Ohne nähere Informationen kann man da leider nicht mehr dazu sagen.
-
ich geh nochmal alles theoretisch/deguge durch
Edit:
string KillTasks;
KillTasks += "5";
while(KillTasks.find(TaskID) == string::npos){schleife...}
-
jetzt funktionierts hat irg wie mit nem anderen thread was zu tun gehabt das beendet wurde. ka warum
-
314159265358979 schrieb:
Hm, ok, und wenn ich das Verhalten nicht haben will?
Boo-hoo
-
hab jetzt n anderes problem bekomme immer einen stack overflow in chkstk.asm - C stack checking routine und hab ka warum weis jm wie der entsteht?
-
- nothing -
-
Ich denke du musst schon ein wenig mehr Code herzeigen, plus folgende Infos:
* wie viele Threads erzeugst du?
* welchen Thread zerreisst es in chkstk.asm?
* wie sieht der Callstack zu dem Zeitpunkt aus?
* wo lebt die ThreadArgs struktur?
...