私は Boost の先物をいじっていましたが、個々のスレッドが完了したかどうかを確認するための受け入れ可能で安全な方法であるかどうか疑問に思っていました.
以前にそれらを使用したことがなかったので、私が書いたコードのほとんどはBoost の Synchronization documentationに基づいていました。
#include <iostream>
#include <boost/thread.hpp>
#include <boost/thread/future.hpp>
int calculate_the_answer_to_life_the_universe_and_everything()
{
boost::this_thread::sleep(boost::posix_time::seconds(10));
return 42;
}
int main()
{
boost::packaged_task<int> task(calculate_the_answer_to_life_the_universe_and_everything);
boost::unique_future<int> f(task.get_future());
boost::thread th(boost::move(task));
while(!f.is_ready())
{
std::cout << "waiting!" << std::endl;
boost::this_thread::sleep(boost::posix_time::seconds(1));
}
std::cout << f.get() << std::endl;
th.join();
}
これは、calculate_the_answer_to_life_the_universe_and_everything() スレッドが 42 を返すのを待っているようです。
ありがとう!