WindowsXP
VB6
二つのTimerを配置し、Timer1では常時監視を行います。
Timer2はEnable = Falseとしておき、Timer1でTimer2を起動する形とします。
Private Sub Timer2_Timer()
Timer2.Enabled = False
ループ処理関数
End Sub
となっています。
このループ処理関数内ではTimer1からの停止処理になるまでループし続けます。
このような実装でなにか問題点とかありますか?
とにかくやりたいことは常時監視とループ処理を並行して走らせたいです。
(実際は順番に処理をしてしまう形になると思いますが。)
よろしくお願いします。
中途半端なコードを見せられてもよくわからないけど、
Window が「応答なし」の状態になっちゃうと予想。
ループ処理だけ延々走って、常時監視はできないんじゃないかと。
何を心配しているのか分かりませんが、
まずは仕様通り動かなければ話にならないのでは?
人に聞くより動かしてみたほうが早いんじゃないでしょうか。
ループ処理がどの程度のものかも判りませんし…。
うーん、Timer1のTimerイベントを利用してTimer2の処理をOn/Offするってことなのかな?
ループ処理は他の処理を妨害してでも動くからなぁ……。
Timer1のTimerイベント毎に監視ついでに1ループだけ動かす方が安全じゃないでしょうかねぇ。
(仕様なら仕方ないですが…)
もんごろいどさんの言われているように確かに動かしてやるべきでした。
動作させ検証させたところ私が思ううごきどおりには動いてくれてそうです。
> Timer1のTimerイベントを利用してTimer2の処理をOn/Offするってことなの?> かな?
→そういうことです。
ほかの処理を妨害するとはTimer1で動いている処理も妨害されてしまうのでしょうか?一定間隔ではTimer1の処理にいかないですよね?
ループ処理をすると、Timer1に限らず思ったとおりに動かないことが
出てくると思います、ということです。
とくま氏の仰るように「応答なし」に近い形になると思います。
(描画を無視してでも処理しますので)
適宜DoEventsでも入れれば大丈夫だとは思いますけど。
ごめんなさい、言葉足らずでした。
最初に述べたループ関数の中にはDoEventsは入れています。
ループの中にDoEventsを入れておけば大丈夫ということですね。
なので、自ら動作検証したときにTimer1が問題なく処理されていたので、
これで問題ないかと思っています。
ありがとうございました。
解決つけ忘れました。
ツイート | ![]() |