tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: 経過報告
投稿日: 2010/02/05(Fri) 08:34
投稿者GOD
> ・たまたまデバック用の変数をメッセージボックスで表示した時、
>   シリアル通信の DoEvents 回数が同じまま、TCP/IP通信の DataArrival が連続発生。
>   メッセージボックスを消すとシリアル通信も再開された。
> 上記現象はデバックモードではなく実行ファイル形式で動作させている場合のみ出る現象のようです。
>
メッセージボックスでユーザーの入力待ちをしていれば多分止まりますよ。
関連として自作ウィンドウでもモーダルで表示すれば同じようになります。
理由としては、DataArrival はイベントだからユーザー問い合わせ中(処理中)でもCPU
に空き時間があれば処理を実行できます。(自イベントへの再突入はしないので例外はあり
ますが)
メッセージボックスはユーザー問い合わせという処理をしているので DoEventsには戻って
きません。(DoEvents中のDoEventsとかと同じです。)

--- サンプル(タイマのInterval=1000, ボタン1をクリック後、ボタン2クリック)
Private Sub Command1_Click()
    Dim dt As Date
    
    dt = Now
    Label1 = "Command1_Click in:" & Now
    Do
        DoEvents
    Loop While DateDiff("s", dt, Now) < 10
    Label1 = "Command1_Click out" & Now
End Sub

Private Sub Command2_Click()
    Form2.Show vbModal
End Sub

Private Sub Timer1_Timer()
    Label2 = "Timer1_Timer pass" & Now
End Sub

--- 例外のためのサンプル(自イベントへの再突入はしない、1秒毎にウィンドウは増えない)
Private Sub Timer1_Timer()
    Label2 = "Timer1_Timer pass" & Now
    Dim x As Form
    Set x = New Form2
    x.Show vbModal
End Sub

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

古いスレッドにレスはつけられません。