TWaitResult.wrIOCompletion
は、undocumentedである。誰がいつ、どのように使用されているか知っていますか?TWaitResult.wrIOCompletionはいつ使用されますか?
答えて
これは、以下の方法でTHandleObject
(とその子孫TEvent
、TSimpleEvent
、TMutex
、およびTSemaphore
)により、Windowsでのみ使用されます。
THandleObject.WaitFor()
。UseCOMWait
がTrueに設定されてオブジェクトが作成されると、待機はWin32 APICoWaitForMultipleHandles()
関数によって処理されます。RPC_S_CALLPENDING
が報告された場合、wrIOCompletion
が返されます。UseCOMWait
がFalseの場合、待機はWin32 APIWaitForMultipleObjectsEx()
関数によって処理されます。THandleObject.WaitForMultiple()
。UseCOMWait
パラメータがTrueで、CoWaitForMultipleHandles()
がRPC_S_CALLPENDING
と報告された場合、またはUseCOMWait
がFalseで、WaitForMultipleObjectsEx()
がWAIT_IO_COMPLETION
と報告された場合は、wrIOCompletion
が返されます。
いずれかの方法で、意味は同じです:
にキューイング待ち時間は、1つまたは複数のユーザーモード非同期プロシージャコール(APC)で終了したが、スレッド
APCキューの詳細については、MSDNを参照してください。
012一言で言えば安全な状態でそのような作るときにスレッドによって呼び出されるように、アラート可能なI/OまたはAPC動作は、ユーザ定義の動作/機能は、スレッドにキューイングされることを可能にします呼び出し。 wrIOCompletion
は、WaitFor/Multiple()
を呼び出すスレッドが、タイムアウトが経過する前に待機を停止して、1つまたは複数の待機可能なAlertable/APC機能を実行できることを示します。スレッドは、WaitFor/Multiple()
を再度呼び出して、目的のオブジェクト()の待機を終了する必要があります。
:UseCOMWait
がfalseの場合THandleObject.WaitFor()
は現在WAIT_IO_COMPLETION
(?バグ)を処理しません。これは、代わりにwrError
を返します(とTHandleObject.LastError
プロパティの値が割り当てられません!)
:CoWaitForMultipleHandles()
ドキュメントは、「必要なハンドルまたはハンドルまでの経過タイムアウト期間がを合図た」としてRPC_S_CALLPENDING
を説明し、代わりにRPC_E_TIMEOUT
の方が適切な説明になります。 (ドキュメントエラー?)
は:CoWaitForMultipleHandles()
がCOWAIT_ALERTABLE
フラグで呼び出されることはありませんので、実際wrIOCompletion
に、発生しません:COWAIT_ALERTABLEフラグがdwFlagsパラメータで設定されている場合は
、WAIT_IO_COMPLETIONの値は、待ち時間が終了したことを示しスレッドにキューイングされた1つまたは複数のユーザモードの非同期プロシージャコール(APC)によって呼び出されます。
そしてWaitForMultipleObjectsEx()
がTrueに設定されたbAlertable
パラメータで呼び出されることはありません:
bAlertable [中]
このパラメータがTRUEで、スレッドが待ち状態にある場合、関数が戻るとき、システムはI/O完了ルーチンまたはAPCを待ち行列に入れ、スレッドはそのルーチンまたは機能を実行する。それ以外の場合、関数は戻りませんし、完了ルーチンまたはAPC関数は実行されません。
これらの条件は、wrIOCompletion
の結果をトリガするために必要です。私はQuality Portalのバグレポートを開封しました:
- 1. posix_memalign/memalignはいつ使用されますか?
- 2. インデックス属性はいつSqlite.Netクラスで使用されますか?
- 3. bootstrapcss col-xs- *はいつ使用されますか?
- 4. savedInstanceStateは実際にいつ使用されますか?
- 5. 'mapping.getInputForward()'はいつ使用されますか?
- 6. C++で「宣言」はいつ使用されますか?
- 7. ホステントの他のフィールドはいつ使用されますか?
- 8. Un-named shared memoryはいつ使用されますか?
- 9. セカンダリDNSサーバーはいつ使用されますか?
- 10. 実際にChannelUrlはいつ使用されますか?
- 11. フルリストスライスはいつ使用されますか?
- 12. shared_prefsの.xml.bakファイルはいつ作成され使用されますか?
- 13. アロケータとは何ですか?アロケータはいつ使用されますか?
- 14. C++では、*は3つのものに使用されていますか?
- 15. cms/content.phtmlはこれまで使用されていますか?
- 16. 出力リダイレクトを使用すると、ファイルはいつ作成されますか?
- 17. ハッシュテーブルはいつ使用しますか?
- 18. ByteStringはいつ使用しますか?
- 19. ストリームはいつ使用しますか?
- 20. ストアドプロシージャはいつ使用しますか?
- 21. クラウドサーバはいつ使用しますか?
- 22. ストーリーボードはいつ使用しますか?
- 23. SpringApplicationBuilderはいつ使用しますか?
- 24. getElementByIdはいつ使用しますか?
- 25. ConcurrentSkipListMapはいつ使用しますか?
- 26. CFReleaseはいつ使用しますか?
- 27. OneTupleはいつ使用しますか?
- 28. パーサーはいつ使用しますか?
- 29. passport.jsはいつ使用しますか?
- 30. BindAttributeはいつ使用しますか?