c++ - boost::this_thread::sleep() 与 nanosleep()?

标签 c++ boost posix sleep

我最近发现需要让当前线程休眠一段确切的时间。我知道在 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/

相关文章:

c++ - 在 Boost Test 中使用枚举类

C++ boost json 解析器抑制 "No such node"输出

c++ - boost::unordered_map 是否返回值的引用或拷贝

c - c 中 fork() 的输出

macos - 在 Mac 上使用 Shell 脚本出现错误替换错误?

c - printf 是否总是在遇到换行符时刷新缓冲区?

c++ - NLP:使用 lemmaGen c++ 进行词形还原

c++ - 从周数和年份开始的月份

c++ - Visual Studio C++ 编译器优化破坏代码?

c++ - 如何为新安装的 Boost 添加编译器包含路径和链接器库路径?