10 ミリ秒ごとに正確に実行する必要があるスレッドがありますが、処理時間はさまざまです (簡単にするために、処理時間は 10 ミリ秒未満であると想定できます)。タイミングのわずかなずれは、時間の経過とともに積み重なって問題になります。
これが私の現在の解決策です。面倒そうですが、さらに timeval_subtract の実行に時間がかかってタイミングがズレてしまうのが気になります。誰かがより良い解決策を持っていますか?
これはライブラリ用であり、タイマーやクロックなどのシステム リソースを使用できません。
void mythread(void *ptr )
{
struct timeval tv_being, tv_end;
int usToSleep;
while(1)
{
gettimeofday(&tv_begin)
//do stuff
//now determine how long to sleep so we wake up 10ms after previous wakeup
gettimeofday(&tv_end)
usToSleep = timeval_subtract(tv_begin, tv_end); //this will return 10ms minus the elapsed time
usleep(usToSleep);
}
return;
}