Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi PostThreadMessage an bestimmtes Handle, analog zu PostMessage (https://www.delphipraxis.net/152619-postthreadmessage-bestimmtes-handle-analog-zu-postmessage.html)

s.h.a.r.k 29. Jun 2010 17:22

PostThreadMessage an bestimmtes Handle, analog zu PostMessage
 
Guten Abend,

gibt es eigentlich eine Möglichkeit
Delphi-Quellcode:
PostThreadMessage()
analog zu
Delphi-Quellcode:
PostMessage()
zu nutzen, d.h. dass man dort ein Handle angeben kann, an welches die Nachricht gehen soll. Denn
Delphi-Quellcode:
PostThreadMessage()
verschickt je lediglich eine Nachricht an einen Thread, nur woher soll der andere Thread denn wissen, an welches Handle die Nachricht gehen soll. Hintergrund ist mein LogController, der von beliebigen Threads aufgerufen werden kann (also
Delphi-Quellcode:
Log()
) und eine Nachricht an den MainThread der Anwendung schickt, sodass dieser die Logs abarbeiten kann. Diese Benachrichtigung dient dem synchronisierten Abarbeiten.

// edit

Hab noch vergessen zu erwähnen, dass ich keinerlei Code in die Hauptanwendung schreiben will, da der LogController davon komplett unabhängig bleiben soll. Die einzige Idee, die ich hätte wäre ein globalen Nachrichten-Hook, aber das scheint mir irgendwie etwas zu viel des Guten zu sein.

mfg
Armin

himitsu 29. Jun 2010 17:25

AW: PostThreadMessage an bestimmtes Handle, analog zu PostMessage
 
Die Nachricht geht eben an kein Windows-Handle, sondern wird direkt in die Nachrichtenverwaltung der Threads gesendet (in deren Message-Queue eingetragen) und über die Message-Loop verarbeitet.

Beim Abarbeiten der Message-Queue ist in diesem Fall dann das hwnd der Nachricht 0 (für kein Fenster, bzw. kein Objekt).

Wenn du also ein Window-Handle haben willst, dann wirst du auch PostMessage verwenden müssen.

s.h.a.r.k 29. Jun 2010 17:35

AW: PostThreadMessage an bestimmtes Handle, analog zu PostMessage
 
Dann musst du mir aber auch sagen, wie ich via
Delphi-Quellcode:
PostMessage()
eine Nachricht von einem Thread zu einem anderen schicke? :)

// edit
Ich kann explizit kein
Delphi-Quellcode:
Synchronize()
verwenden, da dieses
Delphi-Quellcode:
PostThreadMessage()
dafür da ist.

himitsu 29. Jun 2010 17:47

AW: PostThreadMessage an bestimmtes Handle, analog zu PostMessage
 
Indem du dir ein Fenster suchst, welches in diesem Thread erstellt wurde, bzw. mit diesem verbunden ist?

Du kannst dir auch geziehlt ein Message-Only-Window erstellen, welches nur für den Nachrichtenempfang und ähnliche Dinge zuständig ist.

s.h.a.r.k 29. Jun 2010 17:50

AW: PostThreadMessage an bestimmtes Handle, analog zu PostMessage
 
Hm, aber die Benachrichtigung muss an den MainThread gehen, sodass der Code, der durch die Message ausgeführt wird, durch den MainThread ausgeführt wird -> Ersatz für Synchronize. Wenn ich das Handle in dem Thread erzeuge und das PostMessage verwende, bringt mir das quasi Null.

// edit
Was heißt "mit diesem verbunden ist"?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz