如何睡眠C++ Boost线程

And*_*dry 36 c++ multithreading boost sleep

似乎无法使用boost :: thread睡眠线程.方法sleep需要system_time但是如何构建它?

查看内部库并没有多大帮助......

基本上我在函数中有一个线程,我作为入口点传递给这个线程,我想调用类似的东西

 boost::this_thread::sleep
Run Code Online (Sandbox Code Playgroud)

什么的,怎么做?

谢谢

Ben*_*ley 89

根据您的Boost版本:

要么...

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

boost::this_thread::sleep_for(boost::chrono::milliseconds(100));
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::milliseconds(100));
Run Code Online (Sandbox Code Playgroud)

你也可以使用微秒,秒,分钟,小时和其他一些,我不确定.

  • 是的,谢谢...我没有注意使用this_thread而只是boost :: thread并没有任何效果:) Thansk (2认同)
  • 这给了我以下错误(使用Xcode 5/LLVM):错误:没有可行的转换从'boost :: posix_time :: microseconds'(又名'subsecond_duration <boost :: posix_time :: time_duration,1000000>')到'const system_time '(又名'const boost :: posix_time :: ptime') (2认同)

use*_*622 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);
Run Code Online (Sandbox Code Playgroud)

例如

boost::this_thread::sleep_for(boost::chrono::seconds(60));
Run Code Online (Sandbox Code Playgroud)

或者也许试试吧

void sleep_until(const chrono::time_point<Clock, Duration>& abs_time);
Run Code Online (Sandbox Code Playgroud)

我使用Boost v1.53和不推荐使用的sleep功能,并且不定期地破坏了程序.当我更改对该sleep函数的调用以调用该sleep_for函数时,程序停止崩溃.