シリアル通信の非同期処理 – プログラミング – Home

シリアル通信の非同期処理
 
通知
すべてクリア

シリアル通信の非同期処理


han
 han
(@han)
ゲスト
結合: 17年前
投稿: 1
Topic starter  

シリアル通信の非同期処理について教えてください。

非同期にするとデータの受信が完了していなくてもアプリケーションに
制御が返るために、データ受信が終わるまでアプリがフリーズするということが
ない、と認識しています。

しかし、web等で調べたところ殆どの場合では受信用のスレッドを作って非同期処理を行
っています。
マルチスレッドにするならば非同期処理にする意味は無いと思うのですが違うのでしょ
うか。

また、WaitCommEventで受信を監視してWaitForSingleObjectやGetOverlappedResult等
で待機していますが、イベントがシグナル化するまで結局待機関数のところで処理が
止まってしまうのに非同期IOにする意味がわかりません。

非同期処理の使いどころを教えていただけないでしょうか。

よろしくお願いします。

VS2003 VC SDK使用


引用解決済
トピックタグ
Que
 Que
(@Que)
ゲスト
結合: 17年前
投稿: 1
 

私の場合は、ブロックさせたくないから.

> GetOverlappedResult等で待機していますが

4番目の引数 bWait を FALSE にすれば関数はすぐに処理を返すはず.


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

シリアル通信は通信手順によって方法が変わります。
必ずしも非同期でなければならないっていうことはありません。
同期方式でもタイムアウトがきちんと設定できていればいいはずです。


返信引用
日曜プログラマー
 日曜プログラマー
(@日曜プログラマー)
ゲスト
結合: 17年前
投稿: 1
 

どっちでも良いとしかいえないが、
私は、非同期でマルチスレッドにします。

理由としては、通信処理がミスったとしてもメインの処理が停止するのはさけたいし、
(通信エラーは、十分想定済みだから)
通信スレッドがブロッキングでブロックされているのも気持ち悪い。
(スレッドを任意のタイミングで停止できなかったりするので)
といった理由からです。

参考になるかな?
ではでは・・・


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました