オーバーラップしたI/Oコールを作成すると、ドライバに責任を委任し、タイムリーに完了するようにします。ドライバにバグがあったり、ハードウェアに機能不全があったりすると、そのような低レベルの操作が失敗した場合でもプログラムを有効な方法で操作し続けることはできません。
ドライバが満たすべきバッファへのポインタを渡したことに注意してください。タイムアウトの終了後に引き続き実行されます。ドライバがのプロセスにバイトをスプライトするときに、実際には要求を完了することができます。あなたは少なくともそれを解決するためにCancelIo()を呼び出さなければなりません。 falseを返す場合は、プロセスを終了します。
これはほとんど意味がありません。オペレーティングシステムからの最低限のサービス保証が必要です。 OVERLAPPEDを使わないでWriteFile()を呼び出すこともできます。同じバギードライバーがあなたのプログラムをハングアップします。 CancelIo()がハングすることはまずありません。それは大丈夫です、それはあなたが問題ではなく、あなたを持っているドライバです。ユーザーがマシンに深刻な問題があることに気付かないようなことではなく、他のプログラムもこの種の不具合に苦しんでいます。
非常に起こりそうなコーナーケースを扱うコードは作成しないでください。そして、とりわけ、効果的にテストできないコードを書かないでください。
非ブロッキング書き込みシステムコールを使用するには、いくつかのフラグでOVERLAPPED IOを使用する必要があります。 – RedX
私は知っている...既にそれを試してください:) – Yanshof
それから私はあなたの質問を理解していない...たぶんあなたはそれを言い換えることができるか、明確にするために少しのコードを投稿する。 – RedX