Jus*_*ini 20 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);
Run Code Online (Sandbox Code Playgroud)
提升方法:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp>
...
boost::this_thread::sleep(boost::posix_time::nanoseconds(1000));
Run Code Online (Sandbox Code Playgroud)
Cub*_*bbi 26
我能想到的使用提升的几个原因:
boost::this_thread::sleep() 是boost.thread中的中断点boost::this_thread::sleep()可以std::this_thread::sleep_until()在将来用C++ 0x取代
为什么不 - 如果您根本不使用线程,或者项目中的其他所有内容都使用POSIX调用,那么nanosleep()更有意义.
至于精度,在我的系统上,boost和nanosleep()都调用相同的系统调用,hrtimer_nanosleep().我想提升作者试图在每个系统上获得最高的精度,对我来说,它恰好与提供的一样nanosleep().
怎么样因为你的nanonsleep例子是错误的.
#include <time.h>
...
struct timespec sleepTime;
struct timespec time_left_to_sleep;
sleepTime.tv_sec = 0;
sleepTime.tv_nsec = 1000;
while( (sleepTime.tv_sec + sleepTime.tv_nsec) > 0 )
{
nanosleep(&sleepTime, &time_left_to_sleep);
sleepTime.tv_sec = time_left_to_sleep.tv_sec;
sleepTime.tv_nsec = time_left_to_sleep.tv_nsec;
}
Run Code Online (Sandbox Code Playgroud)
不可否认,如果你只是睡了1微秒,过早醒来应该不是问题,但在一般情况下,这是完成它的唯一方法.
只是为了加强对蛋糕的青睐,boost::this_thread::sleep()是用来实现的nanosleep().他们只为你照顾所有疯狂的角落案件.
| 归档时间: |
|
| 查看次数: |
28103 次 |
| 最近记录: |