2つのTimerの処理に関して

解決


しーな  2011-06-09 22:03:31  No: 102950

WindowsXP
VB6

二つのTimerを配置し、Timer1では常時監視を行います。
Timer2はEnable = Falseとしておき、Timer1でTimer2を起動する形とします。

Private Sub Timer2_Timer()
    Timer2.Enabled = False
    ループ処理関数
End Sub

となっています。
このループ処理関数内ではTimer1からの停止処理になるまでループし続けます。
このような実装でなにか問題点とかありますか?
とにかくやりたいことは常時監視とループ処理を並行して走らせたいです。
(実際は順番に処理をしてしまう形になると思いますが。)

よろしくお願いします。


とくま  2011-06-10 01:45:40  No: 102951

中途半端なコードを見せられてもよくわからないけど、
Window が「応答なし」の状態になっちゃうと予想。
ループ処理だけ延々走って、常時監視はできないんじゃないかと。

何を心配しているのか分かりませんが、
まずは仕様通り動かなければ話にならないのでは?


もんごろいど  2011-06-10 02:35:31  No: 102952

人に聞くより動かしてみたほうが早いんじゃないでしょうか。
ループ処理がどの程度のものかも判りませんし…。

うーん、Timer1のTimerイベントを利用してTimer2の処理をOn/Offするってことなのかな?
ループ処理は他の処理を妨害してでも動くからなぁ……。
Timer1のTimerイベント毎に監視ついでに1ループだけ動かす方が安全じゃないでしょうかねぇ。
(仕様なら仕方ないですが…)


しーな  2011-06-10 03:13:40  No: 102953

もんごろいどさんの言われているように確かに動かしてやるべきでした。
動作させ検証させたところ私が思ううごきどおりには動いてくれてそうです。

> Timer1のTimerイベントを利用してTimer2の処理をOn/Offするってことなの?> かな?
→そういうことです。

ほかの処理を妨害するとはTimer1で動いている処理も妨害されてしまうのでしょうか?一定間隔ではTimer1の処理にいかないですよね?


もんごろいど  2011-06-10 17:36:30  No: 102954

ループ処理をすると、Timer1に限らず思ったとおりに動かないことが
出てくると思います、ということです。
とくま氏の仰るように「応答なし」に近い形になると思います。
(描画を無視してでも処理しますので)

適宜DoEventsでも入れれば大丈夫だとは思いますけど。


しーな  2011-06-10 17:57:51  No: 102955

ごめんなさい、言葉足らずでした。
最初に述べたループ関数の中にはDoEventsは入れています。
ループの中にDoEventsを入れておけば大丈夫ということですね。

なので、自ら動作検証したときにTimer1が問題なく処理されていたので、
これで問題ないかと思っています。

ありがとうございました。


しーな  2011-06-10 17:58:20  No: 102956

解決つけ忘れました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加