2

以下の MyServer 側のコード スニペットを検討する

public void CreateEvent()
{
   var serverReadyEvent = new EventWaitHandle(false, EventResetMode.AutoReset, "aaa");
}

MSDN から検索した後、ctor の 3 番目のパラメーターは次のことを意味します。

名前

タイプ: System.String

システム全体の同期イベントの名前。

しかし、CreateEventメソッドを例外なく複数回呼び出すことができることがわかりました。これは、複数の EventWaitHandle インスタンスが同じ名前で存在するということですか? これは正しい動作ですか?

以下は MyClient 側のコード スニペットです。

public void OpenEvent()
{
     EventWaitHandle.OpenExisting("aaa");
}

CreateEventが MyServer 側で 2 回呼び出された場合、OpenEventが呼び出された後に MyClient 側でどのイベントが開かれますか?

4

1 に答える 1

4

のドキュメントをCreateEvent()参照してください。

lpNameパラメータのドキュメントには次のように記載されています。

lpName が既存の名前付きイベント オブジェクトの名前と一致する場合、この関数は EVENT_ALL_ACCESS アクセス権を要求します。この場合、bManualReset および bInitialState パラメーターは、作成プロセスによって既に設定されているため、無視されます。

したがって、イベントが既に存在する場合は、既存のイベントへのハンドルが返されることがわかります。

したがって、存在するイベントは 1 つだけであり、どのイベントが開かれるかという質問に対する答えは、「作成された唯一無二のイベント」です。

于 2014-09-17T09:52:53.360 に答える