Verschiedene Dialogfenster in einem Thread ausführen

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Verschiedene Dialogfenster in einem Thread ausführen

Beitrag von Klaus Schuster »

Hallo Profis,

ich erzeuge innerhalb des Hauptfensters (setAppWindow()) versteckt verschiedene Dialogfenster. Diese übergeben ich je nach Bedarf einem Thread in dem sie angezeigt werden. Dieser Thread enthält eine eigene Eventschleife. Wenn ich nun mit postAppEvent eine Nachricht an die Eventschleife des Unterfenster senden möchte, gebe ich das Unterfenster als letzten Parameter im Aufruf an. Aus irgendeinem Grund gelangen diese Nachrichten stets in die Eventschleife des Hauptfensters. Woran kann dies liegen? Weitergehend, wodurch wird die Zuordnung des Unterfensters zur Eventschleife im Thread geschaffen?

Danke für Ideen.
Gruß Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Verschiedene Dialogfenster in einem Thread ausführen

Beitrag von georg »

Hallo, Klaus -


wenn Du im PostAppEvent() für oXbp ein Objekt angibst, das zu dem betreffenden Thread gehört (d.h. in dem Thread erzeugt worden ist), dann sollte die Nachricht auch dort ankommen.

Ich verwende so etwas um einen Browse zu aktualisieren, wenn in einem Dialog, der in einem eigenständigen Thread läuft, eine Änderung an einem Datensatz vorgenommen wurde. Zu diesem Zweck erhält der Dialog eine Referenz auf das XbpBrowse-Objekt. Das ist zwar das Spiegelbild zu Deinem Scenario, funktioniert aber.

Ich würde Dir raten, nochmals zu prüfen, ob Du das richtige Objekt angibst, denn in der Haupt-Eventschleife muss ja ein solches Objekt irgendwie "bekannt" sein.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Verschiedene Dialogfenster in einem Thread ausführen

Beitrag von Klaus Schuster »

Hallo Georg,

vermutlich hast Du mit "(d.h. in dem Thread erzeugt worden ist)" den Kern getroffen. Die Dialogfenster werden nicht im Thread erzeugt, sondern vorher im Hauptfenster. Ich wollte :create() um Resourcen zu schonen nur einmal beim Programmstart ausführen. Während eines Vortrags hat Steffen ein ähnliches Vorgehen angesprochen, den Aspekt, die Fenster anschließend in einem Thread auszuführen, jedoch nicht erwähnt. Vielleicht besteht ein Lösungsansatz darin, das gesamt Threadobjekt inklusive Maske zu erzeugen und mit :start auszuführen.

Weißt Du einen anderen Weg, die Fenster an den Eventloop im Thread zu koppeln?
Gruß Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Verschiedene Dialogfenster in einem Thread ausführen

Beitrag von georg »

Hallo, Klaus -

in der Quelle des Haupt-Eventloop:

Code: Alles auswählen

Static aThreads

FUNCTION Main()
   ...
   aThreads := {}
   ...
   nEvent := xbe_None
   WHILE nEvent <> xbeP_Close
      ...
   END
RETURN(.T.)

FUNCTION AddAThread(oThread, cInfo)
   AAdd(aThreads, {oThread, cInfo})
RETURN(.T.)
Auf diese Art und Weise solltest Du aus einem Thread durch Aufruf von AddAThread() entweder das Thread-Objekt (von dem ich nicht weiss, ob es als zum Thread gehörend betrachtet wird) oder irgendein anderes Objekt, das im Thread-Kontext erzeugt wurde, sowie eine Identifikation zurückgeben. Die legst Du in aThreads ab. cInfo dient dazu, es Deinem Programm zu ermöglichen, den "richtigen" Thread zu erkennen.

Ansonsten starte ich den Thread und erzeuge alle dazu gehörenden Dialoge als ersten Schritt im neuen Thread.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 367
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Verschiedene Dialogfenster in einem Thread ausführen

Beitrag von Klaus Schuster »

Hallo Georg,

herzlichen Dank für Deine Anregungen! Ich werde, sobald es mir möglich ist, Tests ausführen und berichten.
Gruß Klaus
Antworten