タイマイベントを使用しないで一定間隔で処理を行うには?


HIRO  2002-10-24 14:22:55  No: 76265  IP: [192.*.*.*]

タイマイベントを使用しないで一定間隔で処理を行いたいのですがいい方法知りませんか?

編集 削除
YuO  2002-10-24 15:27:06  No: 76266  IP: [192.*.*.*]

Sleep API使ってループ回すとか,
スレッド使うとか,目的次第では方法はあるでしょうが,
一般にタイマー使わずにインターバル処理を行うのはそれなりの知識を要求しますし,非常に面倒くさいです。
タイマを使いたくない理由は何でしょうか?

編集 削除
Say  2002-10-24 16:56:30  No: 76267  IP: [192.*.*.*]

CPUパワーを浪費してもいいなら、
Loop内でtimeGetTimeをチェックするのが正確でしょう。

単に「Timerコントロールを使いたくない」というのなら、
SetTimerやSetTimeEventを使うとか、
サブクラス化してWM_TIMERメッセージを拾う、という手もありますが、
それだけの苦労をする価値があるかどうかは疑問です。

編集 削除
イトウ  2002-10-31 16:14:58  No: 76268  IP: [192.*.*.*]

皆さんどやどや言っていますが、それほど難しくはありません。
実際の動作はVBの関数とそれほどかわらないので、試してみると良いかもしれません。
その際には、終了時にちゃんとKillTimerで開放してやらないとウィンドウズの動作が不安定になります。
タイマーイベントを利用する方法は、VBの標準タイマーコントロールの動作と同じ(というよりまったくそれ)なので、TimerProcを使う方法が良いと思います。
TimerProcはイベントより正確です。

編集 削除
Say  2002-10-31 17:32:12  No: 76269  IP: [192.*.*.*]

スレッドが更新されていたので見直して気づきました。

SetTimeEventではなくtimeSetEventですね。失礼。

編集 削除
YuO  2002-10-31 17:39:30  No: 76270  IP: [192.*.*.*]

> TimerProcはイベントより正確です。

なぜ?
TimerProcが呼び出されるのは,WM_TIMERをDispatchMessageした時です。
つまり,タイミングはイベントとまったくかわりありません。

編集 削除
こころ  URL  2002-10-31 23:20:56  No: 76271  IP: [192.*.*.*]

> TimerProcはイベントより正確です。
> つまり,タイミングはイベントとまったくかわりありません。
VBのタイマーコントロールはイベントプロシージャーを抜けてから
指定のインターバルをカウントします。
対して、SetTimerを使用すればコールバック関数内の処理時間も
含めた上で、指定インターバルでコールされます。

イトウさんが言いたかったのはイベント云々ではなく
タイマーコントロールと比較しての話ではないでしょうか。
まぁ、それが仕様だと言われれば、確かにそうなんでしょうが。

編集 削除
ここr  URL  2002-10-31 23:22:44  No: 76272  IP: [192.*.*.*]

追記:何か自分の投稿を見直してみると引用がへたくそだな・・・。
> TimerProcが呼び出されるのは,WM_TIMERをDispatchMessageした時です。
がないと文章の意味が不明ですね・・・。
申し訳ないです。

編集 削除
いとう  2002-11-14 15:46:47  No: 76273  IP: [192.*.*.*]

まったく、稚拙で申し訳ありません。
私も、ウィンドウプロシージャにイベントを送って、それをVBの内部機構が判断して、
Timerイベントを発生する時間のずれと、そして内部イベントを処理するDoeventsメソッドの時間的なロスをちゃんと描き入れるべきでした。

編集 削除