kleine rätselfrage: warum funktioniert dieser code nicht?
-
stop_the_thread = TRUE; DWORD exitcode = STILL_ACTIVE; while (exitcode == STILL_ACTIVE) GetExitCodeThread (threadhandle, &exitcode);
zur info:
stop_the_thread ist eine BOOL-variable, die von einem thread periodisch abgefragt wird. ist sie TRUE, dann beendet er sich.was geht:
der thread wird beendet.was nicht geht:
die while-schleife wird nie verlassen.wer's zuerst rauskriegt ist winapi-könig des c/c++ forums
-
Und was bekommt er dann von Dir?
-
Ich wette du sagst nie, wann denn exitcode mal nicht STILL_ACTIVE ist.
Mfg Ominion
-
Jochen Kalmbach schrieb:
Und was bekommt er dann von Dir?
ich werde ihn als grossen meister der winapi verehren, nie dumm anlabern und immer nur ihn fragen wenn ich windoofs-probleme habe
-
Ominion schrieb:
Ich wette du sagst nie, wann denn exitcode mal nicht STILL_ACTIVE ist.
wenn der thread beendet ist gibt GetExitCodeThread() kein STILL_ACTIVE aus. so steht es jdenfalls in der doku.
btw: mein thread beendet sich mit 'return 0;'
-
das gibts nicht. nach 'ner 3/4 stunde hat keine 'ne idee? ihr enttäuscht mich
-
Warum machst du's nicht einfach richtig? Bist du Busy-Waiting-Fan oder allergisch auf WaitForSingleObject?
-
vielleicht ist STILL_ACTIVE == 0 ??
-
MFK schrieb:
Warum machst du's nicht einfach richtig? Bist du Busy-Waiting-Fan oder allergisch auf WaitForSingleObject?
natürlich geht es anders besser (wobei busy waiting für einige millisekunden eigentlich auch okay ist)
Hallifax schrieb:
vielleicht ist STILL_ACTIVE == 0 ??
nö, STILL_ACTIVE ist 0x103
-
net schrieb:
(wobei busy waiting für einige millisekunden eigentlich auch okay ist)
Das ist Ansichtssache. Jedenfalls ist es hier IMHO komplett sinnlos. Es würde mich sehr wundern, wenn sich der Status des überwachten Threads ändert, während ein anderer auf der Stelle rotiert.
Ändert sich das Verhalten mit Sleep(0)?
-
Ich habe so das Gefühl, dass etwas mit diesem Code nicht stimmt:
stop_the_thread = TRUE; DWORD exitcode = STILL_ACTIVE; while (exitcode == STILL_ACTIVE) GetExitCodeThread ([b]threadhandle[/b], &exitcode);
Mfg Ominion
-
Okay, war einen Versuch wert. ^^ Teste mal, ob GetExitCodeThread vielleicht 0 zurückgibt, also irgendwie nicht richtig arbeitet (siehe Doku)
Edit: Würde nämlich heißen, dass exitcode gar nicht verändert wird
-
Meine zweite Möglichkeit wäre:
stop_the_thread = TRUE; DWORD exitcode = STILL_ACTIVE; while (exitcode == STILL_ACTIVE) [b]{[/b] GetExitCodeThread (threadhandle, &exitcode); ... return 0; [b]}[/b]
Ist zwar nicht zwingend notwendig, aber wer weiß was net mit Fehler meint.
Mfg Ominion
-
Tschuldigung das ich schon wieder poste: GetExitCodeThread gibt STILL_ACTIVE oder 0 zurück.
Mfg Ominion
-
MFK schrieb:
Es würde mich sehr wundern, wenn sich der Status des überwachten Threads ändert, während ein anderer auf der Stelle rotiert.
windows macht preemptives multitasking. daran sollte es nicht scheitern.
MFK schrieb:
Ändert sich das Verhalten mit Sleep(0)?
naja, es könnte dafür sorgen, dass der compiler für die abfrage leicht anderen code erzeugt (au weia, jetzt habe ich zuviel verraten)
-
also eigentlich meinte ich sowas:
[code]int test test = GetExitCodeThread(...); if(test == 0) //Es stimmt was nicht[/code]
Klar, dass exitcode nur STILL_ACTIVE oder 0 sein kann
-
Ominion schrieb:
GetExitCodeThread gibt STILL_ACTIVE oder 0 zurück.
Nein.
Und was du sonst so geschrieben hast, ist auch mehr oder weniger Quatsch.
-
Die Lösung steht doch in der Docu ganz unten...
-
hab's gerade ausprobiert: ein Sleep(0) dazwischen ändert nix. dis schleife hängt wie bisher
-
Kann es sein, dass GetExitCodeThread irgendwie frühzeitig zurückspringt?