Probleme mit Thread



  • Hi!

    Ich habe einen Thread, welcher mir in einer while-Schleife eine Zählervariable inkrementiert und diese mit SetWindowTextW() augibt. Das Problem an der Sache ist, dass, wenn ich den Thread beende, dieser in der SetWindowTextW() festzustecken scheint und mein Programm somit einfriert. Dies passiert jedoch völlig willkürlich und scheinbar ohne System.

    Kann mir da bitte wer helfen?

    enne



  • Wie beendest du den Thread denn?


  • Mod

    Wenn Du SetWindowText aus einem Thread verwendest und das Fenster in einem anderen Thread erzeugt wurde dann muss dieser Fenster-Thread auch die Message Loop ausführen sonst steht eben Dein Thread.

    Ich vermute Du hast im Fenster Thread einen WaitForSingleObject gemacht auf den Thread, der will nund SetWindowText ausführen und das Ergebnis setzen und das führt zum klassischen Deadlock!



  • Hi!

    Hab leider immer noch das Problem mit dem Thread. Ich beende den Thread mit CSingleLock() und übergebe der Methode ein killEvent. Danach wird in einer do-while Schleife ::getExitCode() aufgerufen.
    Was kann ich nun tun, damit SetWindowTextW() nach Abbruch des Threads nicht mehr aufgerufen wird, da ansonsten das Programm in CSingleLock() hängen bleibt.

    enne


  • Mod

    Eben nicht SetWindowText aufrufen oder im Main Thread eben die Nachrichten Schleife laufen lassen!
    Übergib as Ergebnisin einer Variablen!



  • Danke Martin!

    Leider bin ich mir nicht sicher, wie du das mit der Nachrichtenschleife meinst. Gibt es Alternativen, um statt SetWindowTextW() einen Text in einem Richedit Fenster zu schreiben?


  • Mod

    Du hastnoch nicht verstanden, dass Fenster einen Threadkontext haben, dadurch können Sie aus einem anderen Thread nur über eine Messageloop angesprochen werden. Wenn also SetMessageText aus einem anderen Thread durchgeführt wird, dann wird diese Nachrciht in die Messagequeue des Fensterthreads eingestellt. Diese kann nur durch PeekMessage/GetMessage abgeholt und ausgeliefert werden. Aber Du stehst eben auf einem WaitForSingleObject, deshalb blockiert das Programm!



  • Wie ist es dann möglich, dass manchmal der Thread sauber beendet wird und manchmal nicht?



  • Was mir gerade eingefallen ist: Wäre es geschickter, statt setWindowTextW die Werte in die Fenster zu zeichnen?


Anmelden zum Antworten