異なるプロセス間でのイベントハンドルの共有
異なるプロセス間でのイベントハンドルの共有
WIN32 APIのDuplicateHandleを用いて、異なるプロセス間でのイベントハンドルを共有したいのですが、うまく動作しません。(1)~(3)にプログラムの詳細を示します。
(1) プロセスAで「本物」のプロセスハンドルを取得
DuplicateHandle(
GetCurrentProcess(),
GetCurrentProcess(), // 疑似ハンドル
GetCurrentProcess(),
&RealProcessHandle, // 本物のハンドル
0,
FALSE,
DUPLICATE_SAME_ACCESS
);
(2) プロセスAでイベントを作成
hEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
(3) プロセスBでイベントハンドルを複製
DuplicateHandle(
RealProcessHandle, // プロセスAが(1)で取得した本物のハンドル
hEvent, // プロセスAが(2)で取得したイベントハンドル
GetCurrentProcess(),
&hNewEvent, // プロセスBで利用するためのイベントハンドル
0,
FALSE,
DUPLICATE_SAME_ACCESS
);
上記のプログラムを実行すると、(1)と(2)は成功するものの、(3)の時点でエラーになり、
GetLastErrorでは6(ハンドルの異常)が表示されます。
プログラムのどこが悪いのでしょうか?
尚、OpenEventによるイベントハンドル共有は、
イベントに名前をつけなくてはならない問題があり、利用しない方針です。
お礼
すみません、なかなか時間が取れなくて試せていません。 やり方が少しややこしいので、今後ログを読む人の為に解決法を書いて締め切ろうと思っていたのですが、 あまり放置するのは回答して頂いた方に失礼ですのでひとまず終わらせて頂きます。 おそらく回答いただいたUnixソケットの機能の一部を利用する事で解決出来そうです。 お礼が遅くなりすみません。
補足
おおお、ソケットでそんな物まで渡せるとは。 OSというか実行環境はcygwin上なので多分行けると思います。ちょっと試してみます。 forkやexecで渡す、と言うのはfork()"前"にディスクリプタを作るとう事ですよね。 今回はforkした"後"に親プロセスで作ったのを子プロセスで使用したいので、最初から 別プロセスという考えでいます。