0

関数で使用されるイベント オブジェクトのベクトルがありWaitForMultipleObjectsます。イベントが通知された後、クローズ ハンドル関数を使用してイベントを閉じようとしましたが、次のようなエラーが発生しますInvalid handle was specified。誰が問題が何であるかを言うことができますか?

std::vector<HANDLE> eventVector;
//..
// Entering data to vector

size_t count = eventVector.size();
DWORD signaledEvent;
While(count > 0)
{
  if (WAIT_OBJECT_0 == (signaledEvent =     WaitForMultipleObjects(handleVector.size(),handleVector.data(), false, INFINITE)))
  CloseHandle(handleVector[signaledEvent - WAIT_OBJECT_0]); // Here I am getting error.
  count--;
}
4

1 に答える 1

1

最初の反復ではうまくいく可能性がありますが、ハンドルを閉じると、同じベクトルをWaitForMultipleObjects再度指定することはできません。ハンドルの少なくとも 1 つが無効になります。

そのため、そこでWaitForMultipleObjectsエラーが返され、後で別のエラーが返される可能性がありますCloseHandle

これはあなたの本当のコードではありませんよね?このコード スニペットでは、返された値のエラーを実際にはチェックしていないためです。このコード スニペットには注意すべきエラーが他にもあるため:

  • もしも(...); - 空の条件付きブロック
  • 上記の理由により、不正なインデックスでベクターにアクセスしている可能性があります
  • あなたWAIT_OBJECT_0 + 0だけをチェックし、他のものはチェックしませんWAIT_OBJECT_0 + N
于 2012-09-27T11:39:07.740 に答える