• ベストアンサー

プロセス間の同期処理

いつもお世話になっております。 プロセス間の同期処理を教えていただけますでしょうか。 プログラムの構成は下記のとおりです。 | <---  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年程度で悪戦苦闘しております。 まとまりに欠いた質問で大変恐縮ですが、 どうぞよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.1

イベントオブジェクト(CEvnet)を使用して、共有メモリに何かを書いたと通知しあえばよさそうです。もちろん、待機はイベントオブジェクトに対して行います。

crm
質問者

お礼

ご回答ありがとうございます。 参考にさせていただきます。

その他の回答 (2)

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.3

このケースだと同期そのものが排他処理になっているように思えますが。 main.exeがipc.exeにリクエストして応答を待つ = main.exeが制御権をipc.exeに渡す ipc.exeがmain.exeに結果を返し、次のリクエストを待つ = ipcが制御権をmain.exeに渡す 判定結果はメッセージで渡せますし。 他にデータが沢山あればそれは共有メモリーでしょうが、その場合でもメッセージそのものが排他の判定に使えますし。

noname#30727
noname#30727
回答No.2

#1 です CEvnet→CEvent の打ち間違いでした。

関連するQ&A

専門家に質問してみよう