Kann Events Inter-Process sein?
Frage
I ein Ereignis in einem Prozess erstellt und zu testen, geschickt, um das Ereignis-Handle über ein Rohr zu einem völlig separaten Prozess (kein Kind Gewinde)
Als ich das Ereignis im ersten Feuer, nicht WaitForSingleObject das Ereignis nicht erkennen, so dass ich die Antwort erraten bin nicht, es sei denn ich etwas Trick in der SECURITY_ATTRIBUTES Struktur?
Oder vielleicht brauche ich ein benanntes Ereignis zu verwenden, und rufen Sie Openevent ()?
In diesem Fall kann ich nicht Fenster-Nachrichten verwenden, weil ich einen Windows-Dienst, um zu signalisieren versuchen. Ich konnte das Rohr verwenden, aber es wird viele dieser Anwendungen sein, und ich möchte eine „low cost“ Lösung, wenn möglich, finden.
Andere Optionen wie Memory Mapped-Dateien haben noch mehr Aufwand als das Rohr?
Wie würden Sie das tun?
Lösung
Sie müssen ein benanntes Ereignis erstellen und es in beiden Prozessen zu öffnen. Wenn Sie mehrere Prozesse Hören haben, können Sie erwägen eine Semaphore .
Andere Tipps
Ja, das funktioniert:
#COMPILE EXE "NamedEvent.exe"
#INCLUDE "win32api.inc"
%EVENT_ALL_ACCESS = &h0001F0003
FUNCTION PBMAIN() AS LONG
LOCAL lRet AS LONG, lError AS LONG, lEventName AS ASCIIZ * %MAX_PATH
lEventName = "TestEvent"
lRet = CreateEvent (BYVAL %NULL, %False, %False, lEventName)
lError = GetLastError ()
IF ISFALSE lRet THEN
MSGBOX "Unable to create Event, error:" + STR$(lError),,"CreateEvent error"
ELSE
IF lError = %ERROR_ALREADY_EXISTS THEN
lRet = OpenEvent(BYVAL %EVENT_ALL_ACCESS, %False, lEventName)
lError = GetLastError()
IF lRet THEN
MSGBOX "Opened existing Event, handle:" + STR$(lRet),,"OpenEvent:"
ELSE
MSGBOX "Unable to open Event, error:" + STR$(lError),,"OpenEvent error" : EXIT FUNCTION
END IF
ELSE
MSGBOX "Created new Event, handle:" + STR$(lRet),,"CreateEvent:"
END IF
END IF
END FUNCTION
In der Regel, was hat eine geringere Overhead:
Rohre (unter der Annahme, geringe Größe angegeben)
MemMapFiles
Veranstaltungen