• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バイナリ送信で出るエラーコードの意味が分かりません)

バイナリ送信エラーの意味が分からない

このQ&Aのポイント
  • シリアルポートでバイナリを非同期で送信するプログラムを作成しています。エラーコードの意味が分からないため、質問しています。
  • 実行すると「重複したI/O処理を実行しています」というエラーが発生しました。
  • 間違いを見つけるため、ご指摘をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • penta1331
  • ベストアンサー率64% (16/25)
回答No.1

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)) {   // 失敗 } // ここまでで、送信が完了です。 ~~~

meeyooyoo
質問者

お礼

有難うございました。 問題解決しました。

その他の回答 (1)

  • penta1331
  • ベストアンサー率64% (16/25)
回答No.2

別の質問で既に回答が出ていますね。 無視してください。 申し訳ありませんでした。