Могут ли события быть межпроцессными?
Вопрос
Я создал событие в одном процессе и для тестирования отправил дескриптор события через канал в совершенно отдельный процесс (не дочерний поток)
Когда я запускаю событие в первом, WaitForSingleObject не обнаруживает событие, поэтому я предполагаю, что ответ отрицательный, если только я не пропустил какой-то трюк в Структура SECURITY_ATTRIBUTES?
Или, возможно, мне нужно использовать именованное событие и вызвать OpenEvent()?
В этом случае я не могу использовать оконные сообщения, потому что я пытаюсь подать сигнал службе Windows.Я мог бы использовать канал, но таких приложений будет много, и я хотел бы найти "недорогое" решение, если это возможно.
Другие параметры, такие как файлы с отображением в память, имеют еще больше накладных расходов, чем канал?
Как бы вы это сделали?
Другие советы
Да, это работает:
#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
В общем, что имеет меньшие накладные расходы:
Трубы (при условии, что указан небольшой размер)
MemMapFiles Файлы MemMapFiles
Мероприятия