我最近发现需要让当前线程休眠一段确切的时间。我知道在 POSIX 平台上这样做的两种方法:使用 nanosleep()
或使用 boost::this_thread::sleep()
。
出于好奇,我想知道这两种方法之间有什么区别。精度是否有任何差异,是否有任何理由不使用 Boost 方法?
nanosleep()
方法:
#include <time.h>
...
struct timespec sleepTime;
struct timespec returnTime;
sleepTime.tv_sec = 0;
sleepTime.tv_nsec = 1000;
nanosleep(&sleepTime, &returnTime);
boost 方法:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp>
...
boost::this_thread::sleep(boost::posix_time::nanoseconds(1000));
最佳答案
我能想到的使用 boost 的几个原因:
boost::this_thread::sleep()
是一个 boost.thread 中的中断点boost::this_thread::sleep()
可以 替换为 C++0x 的插件std::this_thread::sleep_until()
在 future
为什么不 - 如果您根本不使用线程,或者您的项目中的其他所有内容都使用 POSIX 调用,那么 nanosleep()
更有意义。
至于精度,在我的系统上,boost 和 nanosleep() 调用相同的系统调用,hrtimer_nanosleep()
。我想 boost 作者试图在每个系统上获得尽可能高的精度,对我来说,这恰好与 nanosleep()
提供的相同。
关于c++ - boost::this_thread::sleep() 与 nanosleep()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3072912/