シリアル通信の非同期処理について教えてください。
非同期にするとデータの受信が完了していなくてもアプリケーションに
制御が返るために、データ受信が終わるまでアプリがフリーズするということが
ない、と認識しています。
しかし、web等で調べたところ殆どの場合では受信用のスレッドを作って非同期処理を行
っています。
マルチスレッドにするならば非同期処理にする意味は無いと思うのですが違うのでしょ
うか。
また、WaitCommEventで受信を監視してWaitForSingleObjectやGetOverlappedResult等
で待機していますが、イベントがシグナル化するまで結局待機関数のところで処理が
止まってしまうのに非同期IOにする意味がわかりません。
非同期処理の使いどころを教えていただけないでしょうか。
よろしくお願いします。
VS2003 VC SDK使用
私の場合は、ブロックさせたくないから.
> GetOverlappedResult等で待機していますが
4番目の引数 bWait を FALSE にすれば関数はすぐに処理を返すはず.
シリアル通信は通信手順によって方法が変わります。
必ずしも非同期でなければならないっていうことはありません。
同期方式でもタイムアウトがきちんと設定できていればいいはずです。
どっちでも良いとしかいえないが、
私は、非同期でマルチスレッドにします。
理由としては、通信処理がミスったとしてもメインの処理が停止するのはさけたいし、
(通信エラーは、十分想定済みだから)
通信スレッドがブロッキングでブロックされているのも気持ち悪い。
(スレッドを任意のタイミングで停止できなかったりするので)
といった理由からです。
参考になるかな?
ではでは・・・