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

タイトル Re: MSCommの動作実態と多重On Error文に関して教えて下さい。
投稿日: 2008/03/14(Fri) 17:39
投稿者K.J.K.
> 1)タイマーイベントというのは、(組み込みで言う)タスクレベルで動作し、
> 他方、MSComm1_OnComm()イベントというのは、(同じく)ハード割り込みレベルで
> 呼び出されているなぁ、とデバッグを通じて、感じています。正しいでしょうか?

そうとは言えないでしょう。呼び出される側からみれば、どちらもシングルスレッド時代
からの仕様をそのまま受け継いだ実装になっているので、メッセージキューに該当する
メッセージが入れられて、それが処理する余裕のあるときに処理される、というだけ
のことでしかありません。たとえそもそもの発端がハード割り込みレベルのもので
あってもです。

VB6のコード記述を見ればわかりますが、受動的な処理の基本はイベントドリブンであって、
割り込みではありません。割り込みに該当する機能はせいぜい後述する例外処理ぐらい
しか存在していません。

> 2)上記の送信処理とPrint処理に、内容の異なるエラー処理(On Errorステートメント)を
> 定義しているのですが、VBの内部では、エラーハンドラーは、複数個同時に定義&実効で
> きるのでしょうか?何か、制限があるのでは無いでしょうか?

「例外処理中にその処理が原因で例外が発生すること」を除くと、「同時」に複数の例外を
処理することはありません。例外の情報は常に1つしか保持しません。プローシージャ内で
例外が処理されなかった場合に限り、その外(メソッドの呼び出し元)へ例外が運び出され
ます。

> Print文実行中に(受信ハード割り込みが生じて)MSComm1_OnComm()が実行されて、

Printステートメントのあるプローシージャを抜けるまで、OnCommイベントは生じません。
但し、DoEventsがある場合は、そこでイベントが発生する可能性があります。

で、シビア(というほどでもないけど、UIによる影響を受けたくない場合)なケースでは、
VB6を使うことは勧められません。COMMに対する処理とUIに対する処理を同じスレッド
で行うからです。COMMに限らず、外部機器を使う場合やネットワーク、時間のかかる
ファイル操作などではUI周りだけVBであとは別スレッドを生成するDLLをC++などで作って
使うのが無難なところでしょう。

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

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