Seite 1 von 1

Signale über mehrere Prozesse (Extern)

Verfasst: 24. September 2012 09:39
von Reddi
Guten Morgen,

ich bin im Moment auch dabei mich ein wenig mit QT zu beschäftigen und habe da mal eine Frage.... diese Frage ist mehr technischer Natur, aber da es QT beinhaltet hier vielleicht gar nicht mal so falsch.

Angenommen man hat einen Dienst oder ein Hintergrundprozess der eine bestimmte Struktur überwacht und bei einem bestimmten Ereignis ein "Signal" sendet (emit) ist es möglich das ein weiterer Prozess (Programm) welches
nichts von dem Hintergrundprozess (Dienst) weiss dieses Signal empfangen kann? Das Signal wäre vermutlich in Hintergrundprozess definiert, wie kann man an diese Signale kommen. Kann man die Signale irgendwie global machen und wie kann man Sie identifizieren. Es gibt wohl keine Id wie bei Prozessen. An diesem Problem sitze ich im Moment. Bisher wurde das alles über eine Datei (File) als Man-in-the-Middle gelöst, aber auf dauert ist das zu lästig.
Ein QFilesystemwatcher hat bisher das File überwacht und dann ein Signal gemeldet, wenn eine Änderung statt gefunden hat, aber innerhalb des Prozess (nicht der Hintergrundprozess). Ist das überhaupt möglich? Bzw. gibts vordefinierte Signale die man vielleicht verwenden kann? Ich weiss in C++ gibts solch ähnliche Mechanismen, aber ich möchte wenns geht, dies mit den QT Hauseigenen Signale lösen, weil da kann ich mir sicher sein, das es vom richtigen Prozess abgerufen wird und nicht von einem anderen verändert oder vorher abgegriffen wird.

Ich hoffe es war einigermaßen verständlich was ich gerne wüsste. Vielen Dank schon mal für die Antworten...

liebe Grüße Reddi

Re: Signale über mehrere Prozesse (Extern)

Verfasst: 24. September 2012 12:30
von RHBaum
Komminikation ueber Prozessgrenzen hinweg = IPC
Der QT eigene Signal Slot Mechanismuss ist natuerlich nur prozessintern ^^ Objecte aus unterschiedlichen Prozessen kannst so einfach da nicht verbinden ^^

Wenn du bissi Suchst, wirst finden das QT an IPC direkt unterstuetzt:
Shared Memory,
TCP/IP
D-Bus
QCOP

was von den OS-Apis(WinAPI, Posix, etc .. ) unterstuetzt wird:
TCP/IP
Shared Memory
Pipes
Semaphoren

Was deinem Konzept vielleicht am Naechsten kommt:
MsgQueues.
DIe OS unterstuetzen das meist als Pipes mit einem Bestimmten Msg format nativ.
Winapi - die MsgQueue der GUI ist eine so eine Anwendung von sowas ...
Posix bietet auch extra funktionen fuer pipes die MSG-Strukturen transportieren.

Damit koenntest dir nen (QT)Mapper bauen, der Singale empfängt, die in so ne Msg-Pipe wirft .... die gegenseite dieMsg rausfummelt und dann wieder Signale draus generiert.
Aber das ganze ist hochgradig asynchron. Für synchronitaet muesstest Dann noch bissi mehr implementieren, wenn benoetigt.

wenn du nur 1 oder 2 unterschiedliche Signale hasst, gehts auch mit semaphoren ... wenn aber mehr hasst und fuer jedes Signal nen Semaphor anlegen musst-> overkill

Wenn dein System DBus unterstuetzt, ist das vielleicht auch ne gute alternative .... ist nicht so performant wie native pipes, aber um welten besser zu handeln und zu debuggen ^^

Du hasst die Wahl ....

Ciao ...