例1)タイマーID1、1秒周期のタイマーを指定。
上例では、delayRecoveryRate を指定しないことにより、複数の処理が重なってタイマー発生が遅れた場合でも、今回発生した時刻を元に次回のタイマーを発生させます。
そのため処理が重いとタイマーがどんどん遅れていきますが、処理の負荷は一定化され、ボタンを押すなどのマウスの反応も一定化されます。定周期性をあまり重視しない場合に適しています。VBなどはこのタイプのタイマーです。
例2)タイマーID1、1秒周期のタイマーを指定。リカバリーレート20%を指定。指定。
|
this.SetTimer(1, 1000, -1, 0.2, 10000);
|
上例では、delayRecoveryRate を20%で指定しています。他の処理でタイマーの発生が遅れた場合、次回のタイマー発生を早く発生させることにより、定周期性を確保します。
例えばタイマー発生が500ms遅れた場合、次回以降のタイマーは500ms x 0.2=100ms分だけタイマーを早く発生させます。
遅れ時間の積算値が0になるまで、タイマーを少しづつ早く発生させ、結果として単位時間あたりに発生するタイマー回数(1秒周期の場合、1分に60回など)を一定にたもとうとします。
複数の処理が複数のタイマーで実行される場合、定周期性を確保しようとするため、複数の処理が連続して行われる場合が多くなり、結果としてマウスの反応が鈍くなるなどの欠点があります。
|