Auf Thread warten
-
Hi,
ich habe wieder mal ein Problem.Ich habe einen Thread, der neben dem Hauptprogramm läuft. Im Hauptprogramm wird unter anderem eine GUI erstellt und im Thread werden die Events der GUI verarbeitet.
Nachdem die Hauptfunktion ausgeführt wurde will ich jetzt auf den Thread warten.
Wenn ich das aber mit WaitForSingleObject machen will wechselt Window in den Wartestatus(Sanduhr), was auch die GUI blockiert.
Mein zweiter Versuch war mit GetExitCodeThread auf einen Rückgabewert ungleich 259 zu warten. Das blockiert allerdings auch.
Habt ihr eine Idee wie ich das umsetzen kann?
mfg flona
-
Klar blockiert das. Wenn Du nicht die Sanduhr möchtest müsstest Du auch weitere Nachrichten abarbeiten, also die Messageloop weiterlaufen lassen und einfach per Timer ab und zu nachsehen ob der Thread schon fertig ist.
-
Die MessageLoop wird ja im Thread abgearbeitet!
-
Unsinn! Windows sind threadafin. Wenn also der Thread der das Hauptfenster abarbeitet wartet, dann werden für dieses Fenster keine Nachrichten empfangen.
-
Ja schon, aber ich möchte, dass der Thread weiterläuft nachdem das Hauptprogramm abgearbeitet ist.
-
Hi!
Schick doch ne WM_SELBSTDEFINIERT an deine Schleife, wenn der Thread fertig ist.Gruß,
B.B.
-
(Um es mal in einen ganzen Satz zu bringen) Unter windows wird die WNDPROC (und damit dein Messagehandler) immer in dem thread aufgerufen, in them das Fenster erzeugt wurde.
Kannst Du das, was Du versuchst, genauer beschreiben?
-
Ich versuchs mal des genauer zu beschreiben(Pseudocode):
Main { StarteAlsThread(ThFunc) Hauptfunktion() //Programm weiterlaufen lassen bis Thread beendet wird.!!!! } Hauptfunktion { //Erstelle GUI //Mach noch was anderes } ThFunc { //MsgLoop/verarbeite Events //warte auf Close-Event und beende dann den Thread }
-
Das geht nicht! Du erzeugst die Fenster im Mainthread. Der muss auch eine Messageloop haben.
Jede Messageloop in einem Thread bekommt nur die Nachrichten für die Fenster, die dieser Thread auch erzeugt hat!
http://msdn.microsoft.com/en-us/library/ms644927.aspx
-
Momentan siehts so bei mir aus und das funktioniert:
Main { Hauptfunktion() ThFunc() }
-
Logisch! Jetzt wird die Messageloop im selben Thread ausgeführt wie der Code, der die Fenster ausführt. Eben wie dokumentiert.
Was hast Du denn vor?
-
Ok, sry das hab ich wohl *leicht* missverstanden. *schäm*
Dann werde ich es wohl so lassen wie ich es jetzt habe.
Ich wollte eigentlich nur die Events die während dem Ausführen der Hauptfunktion entstehen bearbeiten.
Trotzdem danke an alle