VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2004/05/19(Wed) 23:00
投稿者フレ
URL
タイトルイベント処理中に違うイベントの処理を行う方法

はじめまして。
フレと申します。

イベント処理中に違うイベントの処理を
行うことができないかと悩んでおります。

VB6をはじめて4ヶ月程度なので
普通ではやらないような処理を
やろうとしているのかもしれませんが
ご容赦ください。

まず、タイマーイベントとボタンのクリックイベントに
以下のような処理を実装しました。
※標準EXEのフォームで実装しています。


Private Sub Timer1_Timer()

    Dim dateTime As Date
    
    dateTime = Now + (300 / 86400)
    Do While dateTime <= Now
        DoEvents
        Call Sleep(100)
    Loop

End Sub

Private Sub Command1_Click()

    Dim dateTime As Date
    
    dateTime = Now + (3600 / 86400)
    Do While dateTime <= Now
        DoEvents
        Call Sleep(100)
    Loop

End Sub


タイマーイベントの処理では5分間ループし続けるという
処理を実装しました。

ボタンクリックイベントの処理では1時間ループし続けるという
処理を実装しました。

アプリケーション起動後にタイマーイベントが
発生して5分間ループします。
5分間のループ中にボタンをクリックして
ボタンクリックイベントを発生させます。

タイマーイベントのループでは、
DoEvents を実行しているので
ボタンクリック直後にボタンクリックイベントの処理に
制御が移って処理が開始されます。

ここで、ボタンクリックイベントのループでも
DoEvents を実行しているので
タイマーイベントの処理にも制御が移ることがあるのかなぁと
想像していたのですが、
ずっとボタンクリックイベントのループから
制御が移りません。

1時間後にやっとボタンクリックイベントのループから抜けて、
イベントの処理が終了した瞬間に
タイマーイベントの処理に制御が移ります。
※とっくに5分以上過ぎているのでタイマーイベントの
 ループ処理はすぐに終了します。

希望としてはタイマーイベントは
5分間しかループしなくていいので
ボタンクリックイベントに制御が
移っていてループ処理が行われている最中でも
5分を経過したらタイマーイベントのループ処理は
終了して欲しいのですが、
ボタンクリックイベントの処理中に
一時的にタイマーイベントの処理に制御を
移すようなことはできないでしょうか?

ActiveX EXE を使って
スレッドモデルを「オブジェクトごとのスレッド」にすれば
ループの処理をそれぞれ別のスレッドで行うように実装できないかなぁ?とも
考えたのですが、標準EXEのフォーム等から
ActiveX EXE のクラスのメソッドを呼び出した場合、
5秒以内にメソッドが終了しないと
フォームをクリックした契機で
「コンポーネントが使用できません。」といった
ダイアログが表示されてしまいます。
※5秒という値は変更可能なようですが...

今回のような処理を行う場合は
みなさんはどのような実装を行われていますか?

今回の問題とは別問題ですけど、
5秒以内にメソッドの処理が終了しないといけない
ActiveX EXE は、あまり使い道がないような...(^^;)

長文で申し訳ございませんでした。

以上です。
よろしくお願いします。


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

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -