- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:COMポート通信で断線)
COMポート通信で断線
このQ&Aのポイント
- VC++でプログラムを作成しています。COMポートで通信するプログラムを作っており、断線したことを検出する方法を知りたいです。
- SetCommTimeoutsを使っても検出できず、WaitCommEventで止まってしまいます。タイマを使ってタイムアウトを検出して通信スレッドを終了させる方法を探しています。
- TerminateThreadは最終手段と考えています。SetCommTimeoutsの使い方も教えていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
タイムアウトとエラー イベントは意味合いが異なります。 まずは WaitCommEvent 呼び出しから処理が戻らない原因を突き止めるべきでしょう。 たとえばリファレンスに書いてある "hFile を開くときに FILE_FLAG_OVERLAPPED フラグをセットしなかった場合は、監視対象のイベントのいずれかが発生するか、エラーが発生するまで制御が戻りません。" に合致していないかチェックする、などです。 http://msdn.microsoft.com/library/ja/jpfileio/html/_win32_waitcommevent.asp 実装例として Platform SDK のサンプルを活用することもお勧めします。 古いサンプルが今でも手に入ります。 http://msdn.microsoft.com/library/en-us/vcsample98/html/vcsmpserialsampleforcommunicationsdemonstration.asp http://msdn2.microsoft.com/en-us/library/ms810467.aspx
補足
とりあえず、タイムアウトで検出したいと思いますので、そちらの情報もいただけますでしょうかm(__)m