【发布时间】:2011-05-14 23:58:09
【问题描述】:
似乎不可能使用 boost::thread 来休眠线程。 方法 sleep 需要一个 system_time 但我该如何构建它?
查看库并没有太大帮助...
基本上我有一个线程 在我作为入口点传递给这个线程的函数内部,我想调用类似
boost::this_thread::sleep
什么的,怎么办?
谢谢
【问题讨论】:
标签: c++ multithreading boost sleep
似乎不可能使用 boost::thread 来休眠线程。 方法 sleep 需要一个 system_time 但我该如何构建它?
查看库并没有太大帮助...
基本上我有一个线程 在我作为入口点传递给这个线程的函数内部,我想调用类似
boost::this_thread::sleep
什么的,怎么办?
谢谢
【问题讨论】:
标签: c++ multithreading boost sleep
取决于您的 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));
你也可以使用微秒、秒、分钟、小时,也许还有其他一些,我不确定。
【讨论】:
boost::this_thread::sleep_for而不是boost::this_thread::sleep,后者已被弃用,见boost::this_thread::sleep。
从另一篇文章中,我了解到 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);
例如
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 函数的调用时,程序停止崩溃。
【讨论】:
首先
boost::posix_time::seconds secTime(1);
boost::this_thread::sleep(secTime);
其次
boost::this_thread::sleep(boost::posix_time::milliseconds(100));
【讨论】:
我了解到,至少在 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() 会立即中断。 sleep(100 mks) 的行为与 sleep(0 mks) 一样。
但是对于小于阈值的时间间隔的 sleep_for() 会暂停整个阈值。 sleep_for(100 mks) 的行为与 sleep_for(15000 mks) 一样。
大于阈值的间隔和值 0 的行为是相同的。
【讨论】: