2

WaitForSingleObject()プログラムで待機を実装するために関数を使用しています。

WaitForSingleObject(eventToBeSigaled, timeOut);

この関数は、指定された時間、イベントが通知されるまで待機することは誰もが知っています。

しかし、この呼び出しに入る前にイベントがすでにシングル化されている場合はどうなるかを知りたいのですが、その時点で待機しますfail(WAIT_FAILED)か? ちゃんと理由をつけて答えてください。このことをもう少し深く知りたい。

4

2 に答える 2

2

最初の質問への回答: イベントが既に通知されている場合、Wait()すぐに戻りWAIT_OBJECT_0ます。

2 番目の質問:WAIT_FAILED返される状況の 1 つは、 が呼び出されたときにイベント ハンドルが閉じている場合Wait()です。Wait()この場合、OS スケジューラは呼び出しを処理できないため、 が返されますWAIT_FAILED

Wait()結局のところ、関数は、特定の条件が満たされるまで、ユーザー スレッドが CPU を OS に戻すための手段であることに注意してください。必要に応じて、OS プリミティブの 1 つを条件 (セマフォ、ミューテックス、イベントなど) として使用します。次に、OS スケジューラはこの条件をチェックして、ワーカー スレッドに CPU タイム スライスを与える必要があるかどうかを判断します。これにより、すべてのスレッド (したがってすべてのプロセス) がシステム リソースを公平に共有できるようになります。

于 2012-05-20T14:35:41.097 に答える
0

最初にドキュメントを確認する必要があります、リンク

Remarks

The WaitForSingleObject function checks the current state of the specified object. If the object's state is nonsignaled, the calling thread enters the wait state until the object is signaled or the time-out interval elapses.

于 2012-05-20T14:42:24.987 に答える