packaged_task是个类模板,用于打包任务,把任务包装起来。它的模板参数是各种调用对象,通过std::packaged_task来把各种可调用对象包装起来,方便将来作为线程入口函数来调用。下面是一个例子:
int test(int x)
{
cout << "Child threadID:" << std::this_thread::get_id() << endl;
cout << "X:" << x << endl;
x += 100;
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
return x;
}
void main()
{
A a;
cout << "main threadID:" << std::this_thread::get_id() << endl;
std::packaged_task<int(int)> mypack(test);
std::thread t(std::ref(mypack), 10);
t.detach();
std::future<int> fu = mypack.get_future();
cout << fu.get() << endl;//阻塞5秒(严格来说小于5秒)
system("pause");
}
结果:
会在fu.get()阻塞5秒(严格来说小于5秒)
也可以将packaged_task对象装进一个容器中,比如vector