電子書籍の厳選無料作品が豊富!

VC++でプログラムを作成しています。
COMポートで通信するプログラムを作っており、断線したことを検出するようにしたいのですが、SetCommTimeoutsを使っても検出できず、WaitCommEventで止まってしまいます(WaitCommEventで指定した待ちプログラム呼び出すことを繰り返す無限ループになってしまう)。そこから、脱出できるようなプログラミング方法はありませんでしょうか?
ただし、タイマを使ってタイムアウトを検出しその通信スレッドを強制終了させるTerminateThreadは最終手段と考えています。
また、SetCommTimeoutsの使い方も説明していただけると助かります(もしかするとコレをちゃんと使えばできるのかも)。
よろしくお願い致します。

A 回答 (1件)

タイムアウトとエラー イベントは意味合いが異なります。


まずは WaitCommEvent 呼び出しから処理が戻らない原因を突き止めるべきでしょう。
たとえばリファレンスに書いてある "hFile を開くときに FILE_FLAG_OVERLAPPED フラグをセットしなかった場合は、監視対象のイベントのいずれかが発生するか、エラーが発生するまで制御が戻りません。" に合致していないかチェックする、などです。

http://msdn.microsoft.com/library/ja/jpfileio/ht …

実装例として Platform SDK のサンプルを活用することもお勧めします。
古いサンプルが今でも手に入ります。

http://msdn.microsoft.com/library/en-us/vcsample …

http://msdn2.microsoft.com/en-us/library/ms81046 …

この回答への補足

とりあえず、タイムアウトで検出したいと思いますので、そちらの情報もいただけますでしょうかm(__)m

補足日時:2007/03/30 08:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!