Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从线程调用的睡眠不会在很长时间内完成_C++_Multithreading_Time_Sleep_Chrono - Fatal编程技术网

C++ 从线程调用的睡眠不会在很长时间内完成

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

我有一个基本的定时器功能,但它只有在睡眠时间很短的时候才能工作。如果延迟小于500毫秒,该功能将正常工作。我尝试过其他睡眠方法,包括sleep()、usleep()、nanosleep()和gettimeofday(),当延迟(针对每个函数进行了调整)太大时(通常在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);
如果延迟大于约400-500,则永远不会输出“完成”


有人知道为什么这样不行吗?谢谢你的帮助

您正在通过调用
join
,等待线程完成吗?@bamboon:我在doSomething()方法中调用timer.join(),在“timer”应该完成之后。如果析构函数仍在计时,我也会在析构函数中调用join()。