質問
1つのプロセスでイベントを作成し、テストするために、パイプを介して完全に独立したプロセス(子スレッドではない)にイベントハンドルを送信しました
最初にイベントを発生させると、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
イベント
所属していません StackOverflow