1

私は単純な Windows コンソール C++ アプリケーションを作成しています。アプリケーションが (同じコンピューターで) 2 回目に開始される場合、新しいインスタンスにまたがってはならず、既に実行中のインスタンスにコマンド ライン引数を渡す必要があります。

ミューテックスを使用して、アプリケーションが 1 つのインスタンスでのみ実行されるようにしましたが、最初のアプリケーションに 2 回目に開始されたことを通知し、コマンド ライン引数を渡すことができません。

ユースケース:
listener.exe -start// リスナーを開始します
listener.exe -stop// リスナーを停止します

4

3 に答える 3

3

単純なブール値 (開始/停止など) を通信したいだけの場合は、おそらくEvent オブジェクトが必要です。

プロセス間でより複雑なデータを交換したい場合は、名前付きパイプまたはおそらく共有メモリのブロックを使用できます。

于 2013-04-02T11:46:05.480 に答える
1

最初のリスナーは、シャットダウン用のイベント オブジェクトを待機する必要があります。起動listener.exe -stopすると、シャットダウンのグローバルイベントが設定され、最初のインスタンスが実行されている場合は終了します。他のプロセスがそれを参照するには、名前付きのイベント オブジェクトが必要です。また、コマンドを 2 回目に起動すると、別のプロセスが起動され、コマンド インタープリターを使用した暗黙的な IPC はありません。

listener.exe -開始:

  1. 名前付きイベントを作成する (CreateEvent)

  2. メインスレッドまたは適切なスレッドでイベントを待ちます。(WaitForSingleObject)

  3. イベント時にシャットダウンを開始

listener.exe -停止

  1. 名前付きイベントへのハンドルを取得します。
  2. 最初のプロセスのスレッドがシャットダウン イベントが発生したことを認識して終了するように、イベントを設定します。

参考文献: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686915(v=vs.85).aspx

于 2013-04-02T11:42:22.183 に答える