2017-07-30 12 views
0

RegisterWaitForSingleObject()関数のドキュメントに「待機スレッド」が記載されていますが、正確に何かに関する説明や参照は見つかりません。「待機スレッド」とは何ですか?

そうでなければRegisterWaitForSingleObject()はスレッドを待機して何もしないようにブロックします。

+0

これはスレッドプールからの通常のスレッドです。しかし、複数のオブジェクト、apc、タイマーシグナル、ioの完了などで待機することができます。これらのスレッドはすべて、作業中(オブジェクトのシグナル、apcなど)で待ち、コールコールバック – RbMm

+0

は、完了I/Oポートスレッドと同じです。 CLR? – user4388177

+0

これはすべてプールからの作業スレッドです。実装はWindowsのバージョンによって異なります。 win2000/xp for i/oポートには、 'ZwRemoveIoCompletion'を介してIOCP上でのみ待機する別々のスレッドが存在します。 'ZwDelayExecution'を介したapc/timerスレッド待ち。 'ZwWaitForMultipleObjects'で待機するスレッドを待ちます。深刻なスレッドプールから始まる深刻なredisigned。タイマーのスレッドを壊さないようにする新しいAPI、 'ZwWaitForWorkViaWorkingFactory'が存在します。新しいプールAPI( 'CreateThreadpool'など)がありますが、これはスレッドだけです – RbMm

答えて

0

RegisterWaitForSingleObject()に待機可能オブジェクトハンドルを渡し、タイムアウトとコールバックを渡します。内部スレッドプールからスレッドを取得し、そのスレッドがシグナル対象オブジェクトまたはタイムアウトまで待機した後、コールバックを呼び出します。したがって、「待機スレッド」は、何か起こるのを待つスレッドです。

+0

確かに、あなたが正しいと思われますが、誰かが複数のシグナル(最大63個)を待ってそれを少なくとも1つ効率的にすることができると述べています。 – user4388177

関連する問題