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);
}
ドキュメントのこのページは、Boost.Date_Timeの使用例を示しています。
ドキュメントのこのページは、Boost.Chronoのチュートリアルです。