私のプロジェクトでは、シリアル ポート (RS232) から読み書きする必要があります。オーバーラップ IO を使用しており、読み取りと書き込みに 2 つの個別のスレッドを使用しています。
すぐに完了しない書き込み操作を発行すると、2 つのイベントで待機 (WaitForMultipleObjects) を開始します。オーバーラップされた構造体の hEvent メンバーに割り当てられたイベント、および停止イベント。スレッドを停止する場合は、SetEvent() を呼び出して停止イベントを通知します。これにより、待機関数が戻ります。書き込み操作がまだ保留中のため、CancelIO() を呼び出して操作をキャンセルします。次に、GetOverlappedResult() で bWait パラメーターを True に設定して、操作が完了するのを待ちます。操作が完了すると、GetOverlappedResult() は False を返し、GetLastError() は ERROR_OPERATION_ABORTED を返します。
ここに私の質問があります:
GetOverlappedResult() が False を返し、GetLastError() が ERROR_OPERATION_ABORTED (完了したがキャンセルされた操作を示す) を返す場合、lpNumberOfBytesTransfered パラメータは有効ですか? つまり、lpNumberOfBytesTransfered は、取り消される前に書き込まれた実際のバイト数を教えてくれますか? または、この場合、lpNumberOfBytesTransfered パラメータは未定義ですか?