似乎无法使用boost :: thread睡眠线程。 方法sleep需要system_time但我该如何构建它呢?
查看内部库并没有多大帮助...
基本上我有一个帖子 在我作为入口点传递给这个线程的函数里面,我想调用像
这样的东西 boost::this_thread::sleep
什么的,怎么做?
谢谢
答案 0 :(得分:87)
取决于您的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));
你也可以使用微秒,秒,分钟,小时和其他一些,我不确定。
答案 1 :(得分:22)
在另一篇文章中,我了解到boost::this_thread::sleep
已弃用Boost 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);
e.g。
boost::this_thread::sleep_for(boost::chrono::seconds(60));
或者尝试
void sleep_until(const chrono::time_point<Clock, Duration>& abs_time);
我正在使用Boost v1.53和不推荐使用的sleep
函数,并且它不定期地破坏了程序。当我更改sleep
函数的调用以调用sleep_for
函数时,程序停止崩溃。
答案 2 :(得分:4)
首先
boost::posix_time::seconds secTime(1);
boost::this_thread::sleep(secTime);
其次
boost::this_thread::sleep(boost::posix_time::milliseconds(100));
答案 3 :(得分: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的行为是相同的。