Thread aktualisiert trotz ModalDialog...
-
Hallo!
habe bei mir folgendes festgestellt:
aus einem Hauptprogramm wird ein Thread gestartet der einige Informationen über Nachrichten an das Hauptfenster übermittelt. Irgendwann mal wird aus Hauptprogramm ein modales Dialog gestartet, Thread läuft wunderbar weiter, bloß kann ich trotz meinem modalen Dialog im Hauptprogramm die aktuellen Varibalen sehen? Das verstehe ich nicht! Bei modalem Dialog bleibt doch das Programm stehen oder? Und ich habe mir eigentlich gedacht die Nachricht die vom Thread gesendet wird im modalen Dialog abzufangen da Hauptprogramm dazu gar nicht kommt: nix wars!
Woran liegt das?Danke
Russak
-
Etwas Source bitte. Wie übergibst du die Variablen vom Thread.
Wenn du direkt in die Variablen reinschreibst (vom Thread) ist das ja logisch da der Thread ja nicht in dein Programm reinschreibt sondern an die Speicherstelle und die wird nicht angehalten.
Du kannst bevor du den Dialog aufruft den Thread auf suspend setzten.
Ist aber gefährlich da er nicht syncroniesiert ist denke ich.
-
Hi!
Übergabe durch SendMessage.
Habe auch jetzt das gemacht mit suspend, musste aber noch mal die Lesefunktion aus dem Thread schreiben. Wie gesagt das kommische ist bei einem modalen Dialog spring die Funktion bei Erhalten von Zeichen aus dem Thread:im Thread:
SendMessage(hWnd, WM_USEREMPFANGZEICHEN, (WPARAM) EmpfangenBuffer, 0);
Und ich dachte wenn ich modales Dialog habe dann kann ich auch in dem diese Nachticht abfangen, hat sich aber herausgestellt dass die Funktion vom Hauptdialog einspringt auf diese Nachricht, wieso auch immer????
Außerdem findet in der Funktionen OnUserEmpfangZeichen eine Darstellung von diesem Zeichen statt, und das geschiet tatsächlich sogar modales Dialog aktiv ist!?
Russak
[ Dieser Beitrag wurde am 01.08.2002 um 11:00 Uhr von Russak editiert. ]
-
Ich bin mir nicht ganz sicher was genau du da versuchst aber ich halte einfach mal folgendes fest:
Wenn du einen modalen Dialog machst dann bedeutet das nur dass die Funktion intern eine eigene Nachrichtenschleife aufmacht und der User die Box wegklicken muss bevor er mit anderen Fenster interagieren kann. Aber eine Nachrichtenschleife gibt es immer, was dazu führt dass auch Nachrichten an dein Hauptfenster natürlich weiterhin verteilt werden. Außerdem ruft SendMessage() die Fensterprozedur direkt auf, wenn du über die MessageQueue laufen willst musst du PostMessage() verwenden.