.NET では、オブジェクトのExited
イベントSystem.Diagnostics.Process
をサブスクライブし、プロセスが終了したときに非同期通知を受け取ることができます。これは私にとって本当に便利です。
シグナルなどを使用したストレートな Win32 に相当するものはありますか? 私が想像する最も近いのはWaitForSingleObject
、無限のタイムアウトでプロセスハンドル以外に何もしないスレッドを生成し、コールバックを呼び出すことです。
.NET では、オブジェクトのExited
イベントSystem.Diagnostics.Process
をサブスクライブし、プロセスが終了したときに非同期通知を受け取ることができます。これは私にとって本当に便利です。
シグナルなどを使用したストレートな Win32 に相当するものはありますか? 私が想像する最も近いのはWaitForSingleObject
、無限のタイムアウトでプロセスハンドル以外に何もしないスレッドを生成し、コールバックを呼び出すことです。
はい、プロセス ハンドルで WaitForSingleObject() を呼び出すスレッドは機能します。しかし、それは無駄です。オペレーティング システムにRegisterWaitForSingleObject()を使用して実行させることができます。.NET Process クラスが Exited イベントを発生させるために使用する関数とまったく同じです。
コールバックで実行できることとまったく同じ種類の制約です。これは任意のスレッドプール スレッドで実行されるため、コードをスレッドセーフに保つために必要な場所で適切にインターロックする必要があります。
の最後の引数はCreateProcess
、ハンドルPROCESS_INFORMATION
を含む構造体hProcess
です。このハンドルを次のように使用できます。WaitForSingleObject