私は基本的なタイマー機能を持っていますが、スリープ期間がかなり短い場合にのみ機能します。DELAY が約 500ms 未満であれば、関数は正常に動作します。sleep()、usleep()、nanosleep()、gettimeofday() など、他のスリープ メソッドを試してみましたが、DELAY (関数ごとに調整) が大きすぎると、それらはすべて機能しなくなります (通常、0.3 ~ 0.5 秒)。動作しない場合、sleep 関数は何も返さず、実行を終了しません。
例えば:
void executeTimer(MyObject *obj) {
printf("Starting timer, delay = %d\n", DELAY);
std::this_thread::sleep_for(std::chrono::milliseconds(DELAY));
printf("Complete\n");
obj->doSomething();
}
プログラムの後半で次の方法で呼び出されます。
timer = std::thread(executeTimer, this);
DELAY が約 400 ~ 500 より大きい場合、"Complete" は出力されません。
これが機能しない理由を誰かが知っていますか?助けてくれてありがとう!