4

std::vectorハンドル オブジェクトがあります。関数で使用するために、これらのハンドル オブジェクトを待つ必要がありWaitForMultipleObjectsます。これはベクトルなので、で使用中にエラーが発生しますWaitForMultipleObjects:

std::vector<HANDLE> events;
// ...
WaitForMultipleObjects(events.size(), events, true, INFINITE);

これを行う方法はありますか?

4

4 に答える 4

4

できれば、STL の最新バージョンを持っている場合は、次を使用する必要があります。

WaitForMultipleObjects(events.size(), events.data(), true, INFINITE);

古い STL では、ベクトルのメソッドとして .data() が利用できない場合に &events[0] を使用できます。

于 2012-06-19T08:48:03.043 に答える
1

基になるベクターバッファに到達するための標準的な方法は次のとおりです。

&events[0]

だからあなたはこれを行うことができます:

WaitForMultipleObjects(events.size(), &events[0], true, INFINITE);

この同様の質問も参照してください。

于 2012-06-19T08:49:47.890 に答える
1

このようにすればいい

WaitForMultipleObjects(events.size(), &events[0], true, INFINITE);

これは移植可能であり、それを行う方法です。

于 2012-06-19T08:35:28.973 に答える
1

のドキュメントをWaitForMultipleObject見ると、2 番目の引数がではなくポインタstd::vectorであることがわかります。ポインターまたはネイティブ配列のstd::vector代わりにクラスを使用することはできません。

できる唯一の方法は、一時的な「配列」を作成し、すべてのハンドルをそれにコピーして、それを引数として使用することです。

チャールズが提案する別の方法は、使用する&vector[0]か、トニーが使用することを提案することvector.data()です(利用可能な場合)。

于 2012-06-19T08:25:26.717 に答える