我使用Boost Threads库在C++中创建了许多线程,我想超时所有这些线程,我可以timed_join()在循环中使用它,但这可以使总等待时间=线程数*时间 -时差.
for(int i = 0; i < number_of_threads; ++i)
{
threads[i]->timed_join(boost::posix_time::seconds(timeout_time));
}
Run Code Online (Sandbox Code Playgroud)
所以,我正在考虑使用内置的posix_time类来计算每个线程的截止日期.这样,总等待时间最多为给定的超时时间.
最简单,最直接的方法是什么?
使用thread::timed_join需要绝对时间(即时间点)而不是持续时间的重载.使绝对时间截止日期为当前时间加上您想要的任何超时持续时间.这将确保thread::timed_join循环中的所有调用都不会等待超过绝对时间期限.
在Boost.Thread的最新版本中(从Boost 1.50开始),现在不推荐使用Boost.Date_Time来支持Boost.Chrono.这是为了更接近C++ 11 中std :: thread的API .
此示例显示如何使用Boost.Chrono或Boost.DateTime指定绝对时间期限:
using namespace boost;
#if BOOST_VERSION < 105000
// Use of Boost.DateTime in Boost.Thread is deprecated as of 1.50
posix_time::ptime deadline =
posix_time::microsec_clock::local_time() +
posix_time::seconds(timeoutSeconds);
#else
chrono::system_clock::time_point deadline =
chrono::system_clock::now() + chrono::seconds(timeoutSeconds);
#endif
for(int i = 0; i < number_of_threads; ++i)
{
threads[i]->timed_join(deadline);
}
Run Code Online (Sandbox Code Playgroud)
文档中的此页面显示了Boost.Date_Time示例用法.
文档中的这个页面是关于Boost.Chrono的教程.
| 归档时间: |
|
| 查看次数: |
2545 次 |
| 最近记录: |