0

私は C# の .NET 4 で作業しています。WorkerProgram.exe の複数のインスタンスを作成する LauncherProgram.exe があり、プロセスの作成時に指定された引数に対していくつかの作業を行います。その後、LauncherProgram.exe は WorkerProgram.exe インスタンスの新しいセットを起動して、いくつかの異なる作業を行います。 .

各 WorkerProgram.exe は、何を処理するかを指示するいくつかのパラメーターを使用して起動され、同時に起動される 1 つ以上の WorkerProgram.exe が存在する可能性があります。WorkerProgram.exe は、指定されたパラメーターを読み取り、いくつかの初期化を実行してから、作業を行う準備が整います。

私が理解しようとしているのは、WorkerProgram.exeの各セットを同時に起動する方法で、各プロセスが持っているLauncherProgram.exeに「伝える」または「信号を送る」または「適切な用語を理解できない」ことです初期化ステップが完了し、開始する準備ができました。セットで起動した WorkerProgram.exe インスタンスで「do your work」の開始を同期したい。

私は次のように動作するように LauncherProgram.exe を設定しています (今のところ型は無視します):

while (there are sets of work to do)
{
  for each set of work
  {
    for each group data in set
      create and launch a WorkerProgram.exe for a single set of data
    wait for all created WorkerProgram.exe to indicate init is complete
    send signal to start processing 
  }
}

私は実際に、名前付きイベントを使用して複数の生成されたプロセスに信号を送り、同時に何かを開始する小さなテスト プログラムを持っています。

(うまくいけば、上記のすべてが理にかなっています)

「N個のプロセスが初期化の準備ができていることを通知するのを待つ」というビットがわかりません。

「プロセス同期」と「ランデブー」を検索し、名前付きイベントと名前付きセマフォの使用を調べました。スレッドに関することはたくさんありますが、個別のプロセスに関することはあまりありません。

LauncherProgram.exe は、必要に応じて System.Diagnostics.Process クラスを使用して WorkerProgram.exe プロセスを作成します。

検索を絞り込むのに役立つより良い用語を教えていただけるか、設計パターンやメカニズム、または役立つライブラリやクラスを教えていただければ、非常にありがたいです。

ありがとう。

4

2 に答える 2

1

System.Threading.Mutexこのクラスをプロセス間通信に使用できます。http://msdn.microsoft.com/en-us/library/system.threading.mutex(v=vs.110).aspxを参照してください。各 Mutex に名前を付けて、WorkerProgram.exe のプロセス ID またはその他の識別特性を名前として付けるのがおそらく最も簡単です。

于 2013-01-11T23:46:46.450 に答える
0

いくつかのプロセス間通信を使用できますが、それを行う簡単な方法は、一時ファイルに書き込むことです。たとえば、いくつかのファイルに DONE を書き込み、すべての WorkerProgram がそれぞれのファイルに DONE を書き込むまで Launcher に定期的に読み取らせますFileMapping。ファイルバッキングを使用してプロセス間でメモリを共有するためのウィンドウ。

これを行う他の方法には、リモート プロシージャ コール、ソケット、および単純なファイル マッピングが含まれます。

于 2013-01-11T23:36:59.313 に答える