投稿日 | : 2005/11/11(Fri) 10:28 |
投稿者 | : ほし |
Eメール | : |
URL | : |
タイトル | : Re^5: OnCommイベントについて |
G13様、 様、ご返信ありがとうございます。
> 要するにPortOpen前に受信したデータがあると、Openと同時にOnCommイベントが発生する
> のを防ぎたいということでしょうか?。
はい、その通りです。ですが、Openと同時にOnCommイベントが発生しないときもあります。
また、「受信開始」ボタン押下前に送られてこない場合もあります。
(説明不足でした。すみません。)
> OnCommイベント時のCommEventプロパティを調べて下さい。
> 多分、comEvReceiveが発生していると思われます。
はい、comEvReceiveが発生しています。
> RThresholdプロパティを0にしておき、PortOpen = True 後に InBufferCountで受信バイト
> 数を検定し、1以上なら不要データとして、InBufferCount = 0とすればクリアされませんか?。
> その後、RThresholdプロパティを30に再設定することでOnCommイベントも回避できませんか?。
必ず発生する問題ではないため、
comMSComm.RThreshold = 0
comMSComm.PortOpen = True
If comMSComm.InBufferCount > 0 then
comMSComm.InBufferCount = 0
comMSComm.RThreshold = 30
End If
としますと、発生しなかったときは「受信開始」ボタン押下後も受信できなくなってしまいました。
ElseIF comMSComm.InBufferCount = 0 then
comMSComm.RThreshold = 30
End If
を追加しますと、元の問題が発生する状態になりました。
解決しようといろいろ調べてみました。
PortOpen = True 前に送信されると、InBufferCountプロパティに格納されるようです。
comMSComm.InBufferCount = 0
としましても、「受信開始」ボタン処理が終了後、OnCommイベントが発生し、
comEvReceiveが発生しています。
(確かに縁を切ったと思った値がいつの間にか存在している・・・orz)
" "様
> 単純に状態遷移表なんかを作って、通過/拒否を調べるのじゃ駄目なのかな。
> イベントの発生するタイミングが重要なのではなくて、
> 利用したくないとき(そういう状態)でイベントでデータを受け取ってしまうのが問題なのでしょう
?
通過/拒否を調べるとはどうすれば調べることができるのでしょうか?
利用したくないデータかどうかを調べる方法がまだ思い浮かばないため
(1回目は必ず利用したくないとは限らないため)
困ってしまっています。