std::this_thread::sleep_for 使用

使用说明

std::this_thread::sleep_for函数是C11的休眠函数,表示当前线程休眠一段时间,休眠期间不与其他线程竞争CPU,根据线程需求,等待若干时间。

由于是一个跨平台的函数,因此在代码中大量应用,避免了在不同平台之间所以通过宏定义编译问题。在windows下,可以简单替代Sleep, 在Linux下,替代usleep

调用例子

头文件定义:
#include 
std::this_thread::sleep_for(std::chrono::milliseconds(1000));//睡眠1000毫秒(1秒)
等同:
std::chrono::milliseconds dura(1000);
std::this_thread::sleep_for(dura);

boost sleep_for

基本作用跟std::this_thread::sleep_for是一样的

头文件定义:#include

调用例子:boost::this_thread::sleep_for(boost::chrono::milliseconds(1000));//延时1秒

注意
1)异常情况:如果将时间修改为过去的时间,该函数会一直阻塞,直到机器时间重新走到修改前的时间,才会唤醒线程。例如当前时间是10:30,修改时间为10:20, sleep_for函数会一直阻塞,直到时间重新走到10:30才重新唤醒。将时间修改为将来的时间,没有问题。并且使用Sleep函数在任何情况下也没有问题,跟系统时间没有关系。

总结:如果系统的时间来回跳变,会影响到sleep_for函数的正常唤醒,从而影响到调用该函数线程的执行状况,并且是上述两种函数都有这个问题

使用经验:最好在各自库创建线程中调用对应的函数,std::thread调用std::this_thread::sleep_for函数,boost::thread调用boost::this_thread::sleep_for

2)在gcc中使用这个函数时,需要再编译的时候加-D_GLIBCXX_USE_NANOSLEEP选项,否则报语法错误

你可能感兴趣的:(C++,c++)