gpt4 book ai didi

c++ - Boost 中使用 Posix Time 的线程超时

转载 作者:太空狗 更新时间:2023-10-29 20:15:49 28 4
gpt4 key购买 nike

我使用 Boost Threads 库在 C++ 中创建了许多线程,我想让所有这些线程超时,我可以在循环中使用 timed_join(),但这会使总等待时间 = number-of-threads * time-out-time。

for(int i = 0; i < number_of_threads; ++i)
{
threads[i]->timed_join(boost::posix_time::seconds(timeout_time));
}

所以,我正在考虑使用内置的 posix_time 类来计算每个线程的截止日期。这样,总等待时间最多为给定的超时时间。

执行此操作最简单直接的方法是什么?

最佳答案

使用 thread::timed_join 的重载,它需要一个绝对时间(即时间点)而不是持续时间。使绝对时间截止日期为当前时间加上您想要的任何超时持续时间。这将确保循环中的所有 thread::timed_join 调用都不会等待超过绝对时间期限。

在最新版本的 Boost.Thread(从 Boost 1.50 开始)中,Boost.Date_Time 现在已弃用,取而代之的是 Boost.Chrono .这是为了更接近 std::thread 的 API。在 C++11 中。

此示例显示如何使用 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);
}

page在文档中显示了 Boost.Date_Time 示例用法。

page文档中有关于 Boost.Chrono 的教程。

关于c++ - Boost 中使用 Posix Time 的线程超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11750615/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com