投稿日 | : 2004/05/24(Mon) 16:47 |
投稿者 | : フレ |
URL | : |
タイトル | : Re^6: イベント処理中に違うイベントの処理を行う方法 |
こんにちは、フレです。
るしぇさん回答ありがとうございます。
> > 「タイマーイベントは約65秒が最長なので、永久にループする」
> > といった旨のご指摘を誤って理解して
> > 例えばIntervalに10秒を設定していて、
> > Timerイベントハンドラ関数の処理が
> > 10秒を超えるようなことがある場合、
> > VBでは恐ろしいような事象が発生するのかな〜なんて
> > 思ってしまいました。(・_・;)
> イベントはスタックされますので…そのうちスタック領域の不足で
> 落ちるんじゃないかと…。
>
> 今回の問題も最初の書き込みで
> >1時間後にやっとボタンクリックイベントのループから抜けて、
> >イベントの処理が終了した瞬間に
> >タイマーイベントの処理に制御が移ります。
> >※とっくに5分以上過ぎているのでタイマーイベントの
> > ループ処理はすぐに終了します。
> という結果になりましたが、これは1つの関数(この場合ボタンクリックイベントの関数)
> の処理中は他のイベント(関数)の処理は後回しにされるから
> いくら DoEvents しても意味が無い…ってことになってると思います。
>
了解しました。
勘違いしたまま実装しちゃうと危険ですね。
> 一度ヘルプで↓この辺読んでみたらどうでしょう?
> [Visual Studio 6.0 ドキュメント]
> └[Visual Basic ドキュメント]
> └[Visual Basic の使用方法]
> └[プログラミング ガイド]
> └[Visual Basic を使ってできること]
> └[オブジェクト]
> └[クラスのイベントの追加]
> └[オブジェクトのイベントの処理]☆
> └[コンポーネント ツール ガイド]
> └[ActiveX コンポーネントの作成方法]
> └[コード コンポーネントの作成技術]
> └[非同期コールバックとイベント]
> └[イベントによる通知とコールバックによる通知]☆
>
> そのものズバリを書いてるわけじゃないんですがなんとなく感じは
> つかめるかと…
>
> 考えてみればイベントも1つの関数です。1つの関数の処理中に
> 他の関数の処理を許すと面倒なことになるでしょ?
> ですから、イベントに限らず…ですが、処理中の関数を抜けることが
> 大事なんです。その辺りを意識して設計すればいいんじゃないでしょうか?
>
ヘルプの場所まで教えていただいて本当にありがとうございます。
とりあえず教えていただいたところあたりから参照しています。
結果、今回の私の希望を叶える実装として
ActiveX Exeを使って、ヘルプにあった非同期コールバック等の手法を使えば
いけるのではないかと考えています。
サンプル的なプログラムを作りながら検証していきます。
ありがとうございました。