#include <iostream>
#include <thread>
#include <future>
//子线程进行赋值,主线程进行获取
void task1(int a, int b, std::promise<int>& ret)
{
int ret_a = a * a;
int ret_b = b * 2;
ret.set_value(ret_a + ret_b);
}
int task2(int a, int b)
{
int ret_a = a * a;
int ret_b = b * 2;
return ret_a + ret_b;
}
//子线程进行赋值,主线程进行获取
int main1()
{
std::promise<int> p_ret;
std::future<int> f = p_ret.get_future();
std::thread t(task1, 1, 2, std::ref(p_ret));
//do something else
//
//get the return value
std::cout << "return value is " << f.get() << std::endl;//get()只能进行一次
t.join();
}
int main()
{
/*
std::async
*/
std::future<int> f = std::async(task2, 1, 2);
//以上等价于std::async(std::launch::async | std::launch::deferred, task2, 1, 2);
//std::future<int> f = std::async(std::launch::async,task2, 1, 2);//创建一个新的线程
//std::future<int> f = std::async(std::launch::deferred, task2, 1, 2);//延时调用
std::cout << "return value is " << f.get() << std::endl;//get()只能进行一次
/*
std::packaged_task
*/
//std::packaged_task<int(int, int)> t(task2);//对任务进行包装
//t(1, 2);
//std::cout << "return value is " << t.get_future().get() << std::endl;
//auto a = std::bind(task2, 1, 2);
//std::packaged_task<int()> t(a);
//t();
//std::cout << "return value is " << t.get_future().get() << std::endl;
auto a = std::bind(task2, 1, 2);
int ret = a();
std::cout << "return value is " << ret << std::endl;
}
C++ async与packaged_task
最新推荐文章于 2024-07-12 10:56:01 发布