C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: MSComm通信中の切断でフリーズ


(過去ログ 83 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■49130 / inTopicNo.1)  MSComm通信中の切断でフリーズ
  
□投稿者/ くら (1回)-(2010/04/23(Fri) 10:24:54)

分類:[VB6 以前] 

お世話になってます。
下記のようなPCのUSB(仮想COM)ポートにつないだUSBマイコンと通信
するプログラムを作りました。
ボタンを押すと通信を開始するのですが、通信完了まではおよそ3秒程度かかります。
その通信中(送信中)に万が一接続が外れたと仮定して通信中にポート
からUSBコネクタを引き抜くとVBがフリーズします。
ステップイン実行で行い、cmdw_Click()内のFor文内をステップイン動作中に
USBを引き抜くとOnComm()イベントに飛び(引き抜かなければForループが終
わるまでOnCommイベントには飛ばない)comEventTxFullに引っかかり、
End Selectの後MSComm1.Outputの部分で8021:アプリケーション定義またはオブジェクト定義のエラーと表示されれます。
そのエラーを無視してステップイン実行を続けると、For文内のMSComm1.Outputの
部分に再度差し掛かった時点でフリーズします。
このフリーズの原因は何か
また、フリーズをうまく回避して送信を中断する方法はないのかをお聞きしたいです
よろしくおねがいします。

'受信イベント発生(受信バッファ1バイト以上)
Private Sub MSComm1_OnComm()


Select Case MSComm1.CommEvent
Case comEvReceive
data = data + MSComm1.InBufferCount

    Buffer = MSComm1.Input
    txBuffer = txBuffer & Buffer
    Text2.Text = txBuffer
Case・・・
・
・
Case comEventTxFull
MsgBox "送信バッファがいっぱい", vbCritical
・
・   
End Select
End Sub

'テキストデーターeeprom書き込みコマンド
Private Sub cmdw_Click()
dim x as integer
x=0
For c = 1 To 32

MSComm1.Output = x & Chr(13) 'データを書き込むコマンド
x=x+10

Next c
end sub

引用返信 編集キー/
■49142 / inTopicNo.2)  Re[1]: MSComm通信中の切断でフリーズ
□投稿者/ オショウ (536回)-(2010/04/24(Sat) 01:06:14)
> また、フリーズをうまく回避して送信を中断する方法はないのかをお聞きしたいです

  この手の話は、過去、何度かカキコしたことあるんですが・・・

  単純な話、フリーズしないメーカーの商品もあります。
  よって、回避不能です。

  そういうことが可能性的に発生するのであれば、USB変換
  タイプを使わずにPCIカード等にするべきでしょう〜

  PCMCIAカードタイプも同様かと思います。

※ PCIカードを稼働中にパソコンのスロットから抜く・・・
  ということは、PCを故障させたいとしか考えられないので
  もしそういう事象があったなら、交通事故かと。

以上。参考まで
引用返信 編集キー/
■49184 / inTopicNo.3)  Re[1]: MSComm通信中の切断でフリーズ
□投稿者/ Jitta on the way (620回)-(2010/04/26(Mon) 07:31:23)
No49130 (くら さん) に返信
> ステップイン実行で行い、cmdw_Click()内のFor文内をステップイン動作中に
> USBを引き抜くとOnComm()イベントに飛び(引き抜かなければForループが終
> わるまでOnCommイベントには飛ばない)comEventTxFullに引っかかり、
> End Selectの後MSComm1.Outputの部分で8021:アプリケーション定義またはオブジェクト定義のエラーと表示されれます。
> そのエラーを無視してステップイン実行を続けると、For文内のMSComm1.Outputの
> 部分に再度差し掛かった時点でフリーズします。
> このフリーズの原因は何か

エラーを無視するから、じゃないの?


> また、フリーズをうまく回避して送信を中断する方法はないのかをお聞きしたいです

エラーをハンドルすれば良いのでは?

「デバッグなしで実行するとフリーズするので、どこでフリーズしているか調べるためにステップ実行した」のでしょうか?
On Error Resume 等で、エラーを無視しているのではないですか?例外が上がってこないならともかく、上がってきているのに、それを無視するのは、何故でしょう?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -