C++ 从线程调用的睡眠不会在很长时间内完成
我有一个基本的定时器功能,但它只有在睡眠时间很短的时候才能工作。如果延迟小于500毫秒,该功能将正常工作。我尝试过其他睡眠方法,包括sleep()、usleep()、nanosleep()和gettimeofday(),当延迟(针对每个函数进行了调整)太大时(通常在0.3到0.5秒之间停止工作),它们都会停止工作。当它不工作时,sleep函数不会返回任何东西,它永远不会完成执行 例如:C++ 从线程调用的睡眠不会在很长时间内完成,c++,multithreading,time,sleep,chrono,C++,Multithreading,Time,Sleep,Chrono,我有一个基本的定时器功能,但它只有在睡眠时间很短的时候才能工作。如果延迟小于500毫秒,该功能将正常工作。我尝试过其他睡眠方法,包括sleep()、usleep()、nanosleep()和gettimeofday(),当延迟(针对每个函数进行了调整)太大时(通常在0.3到0.5秒之间停止工作),它们都会停止工作。当它不工作时,sleep函数不会返回任何东西,它永远不会完成执行 例如: void executeTimer(MyObject *obj) { printf("Starting
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);
如果延迟大于约400-500,则永远不会输出“完成”
有人知道为什么这样不行吗?谢谢你的帮助 您正在通过调用
join
,等待线程完成吗?@bamboon:我在doSomething()方法中调用timer.join(),在“timer”应该完成之后。如果析构函数仍在计时,我也会在析构函数中调用join()。