Nachrichtenschleife ohne Fenster
Hallo zusammen,
ich wollte mal fragen ob es Gründe gibt Message-Only-Windows zu umgehen. Im vorliegenden Fall geht es wieder mal um einen Service, der von Haus aus ja keine Nachrichtenschleife hat in der ich Botschaften verarbeiten kann (oder?). Ich könnte nun besagtes Message-Only-Window erzeugen oder mir einen anderen Weg suchen die Daten auszutauschen. Gibt es da Dinge die ich berücksichtigen sollte? |
Re: Nachrichtenschleife ohne Fenster
Geht es um den die Delphi-Vorlage TService? Dort gibt es selbstverständlich eine Nachrichtenschleife (allerdings im Hauptthread, d.h. nicht im Service-Thread). Aber die Hauptfrage ist hier wohl: Wozu brauchst du ein Fenster?
|
Re: Nachrichtenschleife ohne Fenster
Es geht um einen Service der ohne VCL geschrieben wird. Zur Hauptfrage: Ich könnte mich mithilfe einer Nachrichtenschleife über bestimmte Ereignisse informieren lassen und dachte ich könnte diese dann auch selber für den Datenaustausch nutzen.
|
Re: Nachrichtenschleife ohne Fenster
Auch wenn es hier um einen Dienst geht, vielleicht bringt dir ja dieses allgemeine nonVCL Tutorial auch etwas, falls du das noch nicht kennst:
http://www.delphi-treff.de/tutorials...ierung/nonvcl/ |
Re: Nachrichtenschleife ohne Fenster
Zitat:
ich schätze mal, sicher bin ich mir nicht: wenn dein Dienst ein Windows erzeugt, ist noch kein User angemeldet und das Window wird auf einem normalerweise nicht zugänglichen Spezial-Desktop erzeugt (Genaues findet sich in den Tiefen von MSDN). Wenn sich irgendwann später ein User anmeldet, bekommt er seinen üblichen Desktop, aber FindWindow kann dein Dienst-Window nicht finden, weil FindWindow vom (User-) Desktop-Window ausgehend sucht, da ist aber kein Window des Dienstes. Gruss Reinhard |
Re: Nachrichtenschleife ohne Fenster
Interaktive Dienste gibt es unter Vista nicht mehr, da sie eine Sichrheitslücke darstellen.
|
Re: Nachrichtenschleife ohne Fenster
Danke für die Antworten!
Für mich sieht es so aus, als sollte ich ein Message-Only-Window umgehen. Es erscheint mir zum einen als unsauber und zum anderen auch als unpraktikabel. |
Re: Nachrichtenschleife ohne Fenster
Wenn du schon ein "Fenster" erzeugen willst, dann aber doch hoffentlih keines der VCL
und am besten ein "richtiges" Message-Only-Window? z.B. http://www.delphipraxis.net/internal...=730310#730310 PS: du brauchst nicht unbedingt ein Fenster, denn es ist auch möglich Nachrichten direkt an die MessageQueue eines Threads zu senden PostThreadMessage. PostMessage träge eine Nachticht in die MessageQueue des Threads ein, worin ein Fenster erstellt wurde (bzw. in dem Thread, welcher für das Fenster angegeben wurde) |
Re: Nachrichtenschleife ohne Fenster
Hi,
für Dienste eignet sich aber eher eine Kommunikation über Sockets oder Pipes. Gruss |
Re: Nachrichtenschleife ohne Fenster
@thkerkmann: In diese Richtung wollte ich dann auch gehen. Danke für den Hinweis!
@himitsu: Ich spreche doch die ganze Zeit von Message-Only-Windows ohne VCL ;) Was die Thread-MessageQueue angeht: Das hört sich interessant an. Die könnte man dann auch für die Kommunikation zwischen einzelnen Threads nutzen, oder? |
Re: Nachrichtenschleife ohne Fenster
Falls das noch aktuell sein sollte: Es spricht natürlich nichts dagegen, Fenster in einem Dienst zu verwenden. Die Frage ist, welche Ereignisse du eigentlich mitbekommen willst. Meistens gibt es neben der Lösung mit Fensternachrichten noch eine zweite.
|
Re: Nachrichtenschleife ohne Fenster
Also für das aktuelle Problem (ein Ereignis über das Windows mich informieren soll) habe ich nun auch eine alternative Lösung via Event gefunden. Die Frage war eben ursprünglich ob es "sauber" ist und was es zu beachten gillt. Die Frage wurde ja beantwortet: Message-Only-Windows kann man als "sauber" betrachten, man muss jedoch beachten, dass sie nicht auf dem Desktop des Users zu finden sind (FindWindow...).
Was mich nun noch interessieren würde ist die Thread-MessageQueue weil ich auch mehrere Threads habe, die sich austauschen müssen. Vielleicht kann man das damit ja realisieren? |
Re: Nachrichtenschleife ohne Fenster
An Thread-Nachrichten ist nichts besonderes. Wenn du eine Nachricht an ein Fenster schickst, schickst du sie eigentlich an den besitzenden Thread und lieferst das Fensterhandle als Parameter mit. Bei Thread-Nachrichten ist dieses Fensterhandle einfach null.
|
Re: Nachrichtenschleife ohne Fenster
Besten Dank... Ich probier mal ein bisschen rum und mach evtl. dazu auch nocheinmal einen Thread auf.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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