Hallo,
ich versuche eine Anwendung mit einem Mailslot SysV5?? zu versehen.
Wenn ich nun mit der Option "Warten bis was in der Queue ist" bekomme
ich alle Nachrichten, auch wenn der Empf�nger die ganze Zeit l�uft.
Wenn ich nun in einer GUI in der OnIdle Methode diese Abfrage einbaue,
kann ich nicht einfach mit msgrcv die ganze Anwendung blockieren.
So habe ich IPC_NOWAIT verwendet.
In dieser Version konnte ich nur noch Nachrichten empfangen, die _vor_
dem Programmstart abgesendet wurden. Dannach bekam ich keine mehr -
viel mehr diese nachrichten waren auch nicht mehr vorhanden (ipcs).
Ich hatte die Queue auserhalb von OnIdle beim Programmstart erzeugt.
Nun bin ich so vorgegangen: �ffnen, auslesen und schliesen der Queue in
OnIdle. So gab es Zeitpunkte, in denen Messages gesendet werden konnten,
welche zu einem sp�teren Zeitpunkt ausgelesen wurden.
Ich vermute dabei ein Kongurenzproblem zwischen Sender und Empf�nger.
Wie kann ich dieses Problem L�sen?
Kann ich die Rechte der Queue zeitweise auf Readonly setzen?
Kann ich mit msgctl(...) den Status auslesen (wenn was da, dann
mit Frage 2 arbeiten)?
Gibt es daf�r vielleicht schon beispiel code (mit Client)?
Ich habe im Buch von Helmut Herold "UNIX-System-programmierung"
ISBN 3-89319-958-6 folgende Funktion gesehen, die eine Msgqueue anlegt,
wobei ich die Parameter noch nicht ganz verstehe:
msgget(SERVER_KEY, S_IRWXU|S_IWGRP|S_IWOTH | IPC_CREAT)
SERVER_KEY Ok.
IPC_CREAT Ok.
Weiter wird in diesem Beispiel mit dem Auslesen der Queue die Programm-
ausf�hrung auch blockiert (letzter Parameter = 0).
Vielen Dank f�r eure Hilfe
Lothar Behrens
--------------------------------------------------------
Lothar Behrens | [EMAIL PROTECTED]
Stader Str. 42 |
|
21075 Hamburg | Programming C++ is the future
GERMANY | LINUX too :-)
--
Um aus der Liste ausgetragen zu werden, eine Mail an [EMAIL PROTECTED]
schicken, mit dem Text: unsubscribe suse-linux