タイトル : 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 |