0

WaitForMultipleObjectwaitForAll パラメータ = true の関数を使用しています。ここでは std::vector、待機するハンドル オブジェクトを使用しています。この関数がタイムアウトした場合、タイムアウトしたハンドルを待機していることをどのように特定できますか??

if(WAIT_OBJECT != WaitForMultipleObject(vector.size(), vector.data(), true, 16000))
{
//get the event that causes the wait to time out(assume that only one object is timed out.others are successfully set.)
}
4

2 に答える 2

1

MSDN のWaitForMultipleObjects関数定義によると:

戻り値のマイナスは、待ちを満たしたオブジェクトの配列インデックスWAIT_OBJECT_0を示します。呼び出し中に複数のオブジェクトがシグナル状態になった場合、これは、すべてのシグナル状態のオブジェクトの中で最小のインデックス値を持つシグナル状態のオブジェクトの配列インデックスです。

したがって、チェックする必要があるのは、関数が成功した場合 - 配列に含まれるハンドルの種類とそうでないハンドルの種類を確認するよりも、すべて問題ありません。したがって、問題のあるハンドルを把握できます。

また、機能を確認することをお勧めしますSignalObjectAndWait。その動作は異なりますが、場合によっては役立つかもしれません。

于 2012-06-20T08:35:39.503 に答える
0

あなたはWaitForMultipleObjectを使用していると言いましたが、コードはWaitForSingleObjectを示しています。WaitForMultipleObject を使用していると仮定し、パラメーターに true を指定した場合、ベクトル内のすべてのオブジェクトの状態が通知されたときに関数が戻ることを意味します。

したがって、タイムアウトした場合、オブジェクトは通知されません。

于 2012-06-20T08:32:24.447 に答える