Worker-Thread aus GUI-Thread beeinflussen
-
Ich habe eine längere Operation, die sinnvollerweise in einem von der Anzeige separaten Worker-Thread läuft. Jetzt soll über die Thread-Grenze hinweg in beide Richtungen kommuniziert werden. Also im Klartext: Der Thread soll die GUI auf dem Laufenden halten, was den Fortschritt betrifft, und die GUI soll eventuelle Benutzeraktionen, wie z.B. einen Abbruch, an den Worker-Thread zurückgeben, damit der Vorgang beendet werden kann.
Der GUI Nachrichten zu schicken, ist relativ einfach. Ich arbeite hier mit Custom Messages, die ich dann einfach an das Windows-Fenster schicke, und ab da übernimmt das normale Message-Verhalten von Windows. Aber der umgekehrte Weg ist mir nicht ganz so klar. Ich dachte an einen weiteren Thread mit einem eigenen rudimentären Nachrichtensystem, an den die GUI dann Infos absetzen kann. Und von diesem Thread aus kann dann der Worker-Thread beinflusst oder beendet werden.
Das scheint mir aber zu viel Aufwand zu sein. Kennt jemand vielleicht einen einfacheren Mechanismus?
-
Na kommt drauf an was du alles Übertragen willst, wenn es nur der Abbruch des Threads ist, dann tut es doch eine einfache Variable, willst du mehr machen, könnte man auch eine Liste benutzen, die von der GUI gefüllt und vom Thread ausgeräumt wird (Syncronisierung beachten). Nur mal das ganze so als Gedanke dazu.
-
Das würde schon funktionieren. Allerdings muss dann im Worker-Thread an den richtigen Stellen in der Liste nachgeschaut werden, ob was passiert ist, und diese Stellen häufen sich dann recht schnell. Deswegen kommt es mir so vor, als wäre es besser, wenn die Nachricht irgendwie außerhalb bearbeitet wird, egal was der Worker-Thread gerade macht.
-
aber im Worker-Thread mußte doch trotzdem schaun ob eine Nachricht da ist, da du an einen Worker-Thread ja keine message zukommen lassen kannst, also ich seh da keinen unterschied, außer das du jetzt noch einen thread aufmachst, oder hast du schon eine Vorstellung wie du das lösen wilst?