2010-11-24 183 views
34

似乎不可能睡觉使用boost :: thread的线程。 方法睡眠需要system_time,但我该如何构建它?如何睡觉一个C++ Boost线程

寻找内库并不能真正帮助很大......

基本上我有我传递给这个线程作为入口点函数中的一个线程 ,我想打电话给像

boost::this_thread::sleep 

什么的,该怎么做?

谢谢

回答

83

根据您的Boost版本:

要么...

#include <boost/chrono.hpp> 
#include <boost/thread/thread.hpp> 

boost::this_thread::sleep_for(boost::chrono::milliseconds(100)); 

或者......

#include <boost/date_time/posix_time/posix_time.hpp> 
#include <boost/thread/thread.hpp> 

boost::this_thread::sleep(boost::posix_time::milliseconds(100)); 

您还可以使用微秒,秒,几分钟,几小时,也许还有一些,我不确定。

+2

是的,谢谢你...我没有注意使用this_thread,但只是提升::线程和没有工作:) Thansk – Andry 2010-11-24 13:37:47

+2

这给了我以下错误(使用Xcode 5/LLVM):错误:没有可行的转换从'boost :: posix_time :: microseconds'(又名'subsecond_duration ')到'const system_time'(又名'const boost :: posix_time :: ptime') – 2014-01-31 11:38:15

3

首先

boost::posix_time::seconds secTime(1); 
boost::this_thread::sleep(secTime); 

其次

boost::this_thread::sleep(boost::posix_time::milliseconds(100)); 
19

从另一篇文章,我学到boost::this_thread::sleep已经废弃了升压V1.5.3:http://www.boost.org/doc/libs/1_53_0/doc/html/thread/thread_management.html

相反,尝试

void sleep_for(const chrono::duration<Rep, Period>& rel_time); 

例如

boost::this_thread::sleep_for(boost::chrono::seconds(60)); 

也许尝试

void sleep_until(const chrono::time_point<Clock, Duration>& abs_time); 

我使用升压V1.53与过时sleep功能,并不定期地崩溃的程序。当我将sleep函数的调用更改为调用sleep_for函数时,程序停止崩溃。

0

我学到了艰辛的道路,至少在MS Visual Studio中(试过2013年和2015年)有

boost::this_thread::sleep(boost::posix_time::microseconds(SmallIterval)); 

boost::this_thread::sleep_for(boost::chrono::microseconds(SmallIterval)); 
or 
std::this_thread::sleep_for(std::chrono::microseconds(SmallIterval)); 

当间隔小于一些比较小的之间的巨大差异实质性的门槛(我看到15000微秒的阈值= 15毫秒)。

如果SmallIterval很小,sleep()会立即中断。睡眠(100 mks)表现为睡眠(0 mks)。

但是,小于阈值的时间间隔的sleep_for()在整个阈值内暂停。 sleep_for(100 mks)表现为sleep_for(15000 mks)。

间隔大于阈值和值为0的行为是相同的。