Cでタイマーを作成するにはどうすればよいですか? 特定のアクションを 5 秒ごとに 1 回、別のアクションを 2 秒ごとに実行したいですか?
これを達成するにはどうすればよいですか?誰かが良いリンクやコードを指摘できますか?
Cでタイマーを作成するにはどうすればよいですか? 特定のアクションを 5 秒ごとに 1 回、別のアクションを 2 秒ごとに実行したいですか?
これを達成するにはどうすればよいですか?誰かが良いリンクやコードを指摘できますか?
問題は定期的なタイマーを設定することではなく、異なる期間の 2 つのタイマーを使用することです。
残念ながら、2 は 5 を割ることはできませんが、1 秒の解像度タイマーとカウンターを使用できます。カウンターが 2 の倍数または 5 の倍数の場合は、好きなように処理できます。タイマーを使用して通常どおりシグナル ハンドラーを登録しますが、このハンドラーは次のようになります。
static int cnt = 0;
int handler(int) {
cnt++;
if (cnt % 2 == 0) {
action_a();
}
if (cnt % 5 == 0) {
action_b();
}
}
オーバーフローの問題を取り除くために、たとえば次のようにして、2 と 5 の倍数に達したときにカウンターを 0 にリセットできます。
int handler(int) {
cnt++;
if (cnt == 10)
{
cnt = 0;
}
if (cnt % 2 == 0) {
action_a();
}
if (cnt % (2*5) == 0) {
action_b();
}
}
この手法は 2 つ以上の周期に一般化できることに注意してください。ただし、運が悪い場合、最小公分母は非常に小さい周期である可能性があるため、ほとんど使用しないで高いタイマー信号レートが得られる可能性があります。たとえば、999 ミリ秒の周期と 1000 ミリ秒の周期がある場合、1 ミリ秒ごとに信号が発生することになります。これは、精度とオーバーヘッドの点で理想的ではありませんが、2 秒と 5 秒の場合、これは許容できるはずです。毎秒信号。