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

タイトル Re^2: MSCommの動作実態と多重On Error文に関して教えて下さい。
投稿日: 2008/03/14(Fri) 21:46
投稿者BamChan
> > 1)タイマーイベントというのは、(組み込みで言う)タスクレベルで動作し、
> > 他方、MSComm1_OnComm()イベントというのは、(同じく)ハード割り込みレベルで
> > 呼び出されているなぁ、とデバッグを通じて、感じています。正しいでしょうか?
>
> そうとは言えないでしょう。呼び出される側からみれば、どちらもシングルスレッド時代
> からの仕様をそのまま受け継いだ実装になっているので、メッセージキューに該当する
> メッセージが入れられて、それが処理する余裕のあるときに処理される、というだけ
> のことでしかありません。たとえそもそもの発端がハード割り込みレベルのもので
> あってもです。
>
> VB6のコード記述を見ればわかりますが、受動的な処理の基本はイベントドリブンであって、
> 割り込みではありません。割り込みに該当する機能はせいぜい後述する例外処理ぐらい
> しか存在していません。

一々の丁寧なご回答を有難く受けさせて頂きました。有難う御座います。
問題をややこしくさせてしまい申し訳ないですが、
現在、小生が戸惑っておりますのは、(VB6.0環境ですが)
「上記のPrint文すら、エラーハンドラの書き換えに因って(?)、
まともに動作できなくなってしまうんじゃないか?」という、
本日のランニング結果に基づいての、判断です。
因みに、このPrint文では csv形式の1レコード(CR.LF付き)を書き込んでいますが、
そのレコードの途中で、前のレコードを潰して、次のレコードの先頭が書き込まれている」というトラブルを招いています。

 まだ、ランニング時間は、充分ではありませんが、
On Errorステートメントを、対象であるデバイス(これも組み込み用語)毎に
排他的に使えば(Print中の受信イベントはリトライさせる様にして)、
本不具合は、再現していません。(現在のところ。)

>
> > 2)上記の送信処理とPrint処理に、内容の異なるエラー処理(On Errorステートメント)を
> > 定義しているのですが、VBの内部では、エラーハンドラーは、複数個同時に定義&実効で
> > きるのでしょうか?何か、制限があるのでは無いでしょうか?
>
> 「例外処理中にその処理が原因で例外が発生すること」を除くと、「同時」に複数の例外を
> 処理することはありません。例外の情報は常に1つしか保持しません。プローシージャ内で
> 例外が処理されなかった場合に限り、その外(メソッドの呼び出し元)へ例外が運び出され
> ます。
>
> > Print文実行中に(受信ハード割り込みが生じて)MSComm1_OnComm()が実行されて、
>
> Printステートメントのあるプローシージャを抜けるまで、OnCommイベントは生じません。
> 但し、DoEventsがある場合は、そこでイベントが発生する可能性があります。
>
> で、シビア(というほどでもないけど、UIによる影響を受けたくない場合)なケースでは、
> VB6を使うことは勧められません。COMMに対する処理とUIに対する処理を同じスレッド
> で行うからです。COMMに限らず、外部機器を使う場合やネットワーク、時間のかかる
> ファイル操作などではUI周りだけVBであとは別スレッドを生成するDLLをC++などで作って
> 使うのが無難なところでしょう。

この「無難」という単語に思わず斬り込みたくなるのが、「組み込み屋」のサガでして、
「なんでや?」となる訳です。
たとえ、今後のソースの継承性を犠牲にしてでも、根拠を知っておきたいのです。
 週明けに、もう少し踏み込んだデータを示せれば、と思っています。
レス、参考にさせて頂きます。
有難う御座いました。

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

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