BoostやC++0xにあるfutureクラスはvoidで特殊化されていて、get()したときに単にwaitするだけ、という動作になるようです。
#include <iostream> #include <boost/thread.hpp> #include <boost/ref.hpp> void foo() { // 時間のかかる処理... boost::this_thread::sleep(boost::posix_time::seconds(5)); std::cout << "end foo" << std::endl; } int main() { boost::packaged_task<void> p(foo); boost::unique_future<void> f(p.get_future()); boost::thread t(boost::ref(p)); f.get(); std::cout << "end process" << std::endl; }
end foo end process