VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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回目は必ず利用したくないとは限らないため)
困ってしまっています。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -