1

モデムにデータを送信するためにWriteFileを呼び出しています。

BOOL writeResult = WriteFile(m_hPort, p_message, length, &numOut, NULL);

どこ:

  • m_hPortは有効ですHANDLE
  • p_message はunsigned char*含むate0\r
  • 長さはint値が 5 の
  • numOut はunsigned long0 に初期化されています

時折、このメソッドが成功するのを目にしますが、numOut != length

データを送信せずに WriteFile が成功を返すにはどうすればよいでしょうか?

編集これは私がハンドルを作成する方法です:

HANDLE hPort = CreateFileA("\\\\.\\COM5", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

返品を確認しましたが、INVALID_HANDLE_VALUEそれが有効であることを示唆するものではありません。

4

2 に答える 2

1

ドキュメントには次のように記載されています。

バッファ領域が不十分なノンブロッキングのバイトモード パイプ ハンドルに書き込む場合、WriteFile は *lpNumberOfBytesWritten < nNumberOfBytesToWrite で TRUE を返します

送信できる速度よりも速くデータを送信すると、モデムが同様の動作をする可能性がありますか?

于 2012-02-24T10:16:55.950 に答える
1

結局、ハードウェアの問題であることが判明しました。

コンバーターの電源を入れ直すと、ハードウェア バッファーがクリアされ、そのデバイスのドライバーに問題があることが疑われます。Hans の提案により、タイムアウトを削除し、エラー レポートの詳細な調査を開始しました。

タイムアウトを合理的な値に減らすことで、バッファがいっぱいになるまでバッファがいっぱいになっていることを確認できました。これが、コンバーターの電源を入れ直して問題を解決した理由です (エンジニアリングを通じて電源を再ルーティングし、極性を逆にしようとしましたが、異常に、どちらも問題を解決しませんでした)。

根本的な原因は、不安定なハードウェア フロー制御により、ソフトウェアが無期限にブロックされることでした。フロー制御を無効にすると問題が解決しました。

于 2012-03-12T18:03:16.643 に答える