- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バイナリ送信で出るエラーコードの意味が分かりません)
バイナリ送信エラーの意味が分からない
このQ&Aのポイント
- シリアルポートでバイナリを非同期で送信するプログラムを作成しています。エラーコードの意味が分からないため、質問しています。
- 実行すると「重複したI/O処理を実行しています」というエラーが発生しました。
- 間違いを見つけるため、ご指摘をお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
CreateFileでFILE_FLAG_OVERLAPPEDを指定すると、ファイルI/Oの時間のかかる処理にはERROR_IO_PENDINGが返るようになります。 実際に処理が完了すると、OVERLAPPED構造体のhEventがシグナル化するので、このイベントを待機することで処理完了の判断を行えます。 以下、簡単に記述方法を載せます。 // OVERLAPPED 構造体の初期化部分 old.hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL); ~~~ // データ送信部分 WriteFile(....); DWORD err = ::GetLastError(); if (ERROR_IO_PENDING != err) { // ペンディング以外の時は失敗。エラー処理。 } // イベントがセットされるまで待機する // (ここでは仮に無限待ち/実際にはタイムアウトを指定する) DWORD res = ::WaitForSingleObject(old.hEvent, INFINITE); // Overlapped操作の結果を取得する DWORD len = 0; if (! ::GetOverlappedResult(hCom, &old, &len, TRUE)) { // 失敗 } // ここまでで、送信が完了です。 ~~~
その他の回答 (1)
- penta1331
- ベストアンサー率64% (16/25)
回答No.2
別の質問で既に回答が出ていますね。 無視してください。 申し訳ありませんでした。
お礼
有難うございました。 問題解決しました。