- ベストアンサー
プロセス間の同期処理
いつもお世話になっております。 プロセス間の同期処理を教えていただけますでしょうか。 プログラムの構成は下記のとおりです。 | <--- PC1 --->|<- PC2 ->| Main.exe -> IPC.exe ===> CLE.exe <- <=== ↑ ↑ WinMsg TCPIP Main.exeは、基幹アプリで、キーイベント等を検出します。 IPC.exeは、PC1とPC2間でTCPIP通信を行います。 CLE.exeは、Main.exeの依頼に応答します。 Main.exeで指定のキーを押下された場合、その機能を利用できるか否かを、CLE.exeに問い合わせます。もし、OKであれば、そのキーは有効となりますが、NGであれば無効となります。 (OKまたはNGはIPC.exeで判定します。) その際、Main.exeでは問い合わせを行ってから、その応答を得るまで(又は、指定のタイムアウトが発生するまで)、そのまま待機をさせたいと思っております。 このようなケースでは、おそらくCMutex等の同期オブジェクトを利用することとなるかと思われます。 (Main.exe及びIPC.exe間は共有メモリーでお互いを参照できます。) 確実な排他処理と、判定結果をどのように待機しているスレッド(Main.exe)へ通知させてあげるかわかりません。 Windowsプログラムはまだ1年程度で悪戦苦闘しております。 まとまりに欠いた質問で大変恐縮ですが、 どうぞよろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
イベントオブジェクト(CEvnet)を使用して、共有メモリに何かを書いたと通知しあえばよさそうです。もちろん、待機はイベントオブジェクトに対して行います。
その他の回答 (2)
- terra5
- ベストアンサー率34% (574/1662)
このケースだと同期そのものが排他処理になっているように思えますが。 main.exeがipc.exeにリクエストして応答を待つ = main.exeが制御権をipc.exeに渡す ipc.exeがmain.exeに結果を返し、次のリクエストを待つ = ipcが制御権をmain.exeに渡す 判定結果はメッセージで渡せますし。 他にデータが沢山あればそれは共有メモリーでしょうが、その場合でもメッセージそのものが排他の判定に使えますし。
#1 です CEvnet→CEvent の打ち間違いでした。
お礼
ご回答ありがとうございます。 参考にさせていただきます。