使用说明
std::this_thread::sleep_for函数是C11的休眠函数,表示当前线程休眠一段时间,休眠期间不与其他线程竞争CPU,根据线程需求,等待若干时间。
由于是一个跨平台的函数,因此在代码中大量应用,避免了在不同平台之间所以通过宏定义编译问题。在windows下,可以简单替代Sleep, 在Linux下,替代usleep
调用例子
头文件定义:
#include <thread>
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/thread.hpp>
调用例子: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选项,否则报语法错误