2010-04-19 3 views
7

Ich suche nach etwas analog zu Create(), SetEvent() und WaitForMultipleObjects() aus der Win32-Welt.Gibt es eine C++ Cross-Plattform „bezeichnetes Ereignis wie die "Create()" in Win32?

Speziell dies muss auf alle Prozesse auf demselben Rechner zugreifbar sein

Wir verwenden Poco bereits für einige plattformübergreifende Sachen, aber ich sehe nicht, dass das Poco :: Event das ist, was ich will, vielleicht fehlt mir etwas.

BEARBEITEN:

T o erklären, was ich tun möchte:

Ich möchte Prozess B zu wissen, wenn etwas in Prozess A passiert. Dies ist trivial in Win32 - Jeder Prozess/Thread ruft CreateEvent() mit einem Namen für das Ereignis. Prozess B ruft waitForXObject() auf, und Process A ruft SetEvent() auf, wenn etwas passiert. B wird signalisiert.

Wieder ist dies in win32 trivial, aber wie man es plattformübergreifend macht.

+0

Können Sie mehr erklären, was Sie zu tun versuchen? Es gibt kein C++ -Äquivalent, es gibt Bibliotheken, die für Sie arbeiten könnten. Es klingt für mich, dass, was Sie brauchen könnten, ist einige Middleware, um Ihre Sachen (Natürlich rate ich) –

+0

@Romain - Ich habe Details hinzugefügt. Ich weiß, dass es keine C++ - Primitive gibt. Was ich suche, sind Möglichkeiten, es in C++ zu tun, keine Sprachveränderung. – Tim

+1

Siehe meine Antwort Sie wollen boost :: named_condition, es gibt keine eingebaute C++ Möglichkeit, dies ohne eine Bibliothek wie Boost zu tun. –

Antwort

4

Es gibt keine in Art und Weise in C++ erstellt wird, um den Namen Ereignis zu tun. Aber Sie können Boost verwenden, um es zu tun.

Sie suchen boost::condition und boost::named_condition

Wie Sie auch erwähnt existiert: Poco.NamedEvent

+0

Ich muss etwas fehlen - wie gebe ich einen bestimmten Mutex/Bedingung? – Tim

+0

ah - "named" ist der Schlüssel. Vielen Dank – Tim

2

boost hat eine Reihe von plattformübergreifenden threading primitiven wie diese.

Blick auf boost: Mutex

Eigentlich schauen, bei Cross-Platform equivalent to windows events

+0

Ich hatte gesehen, dass, wenn ich SO vor dem Posten gesucht habe - aber nicht einen Weg sah, um die Ereignisse in dieser Antwort zu "benennen". – Tim

+0

Fazit aus diesem Thread: Boost oder Qt, je nachdem, was Sie bevorzugen – Pieter

1

oops - Nach Brians Antwort zu benannten Ereignisse zu sehen, es scheint, dass ich Poco-Lösung verpasst:

http://pocoproject.org/docs/Poco.NamedEvent.html

Ich hatte nur Poco.Event

gesehen

Wir werden das wahrscheinlich verwenden, da es im Client-Code einfacher und leichter erscheint.

Verwandte Themen