#include <iostream>
#include <future>
using namespace std;
std::future 提供访问操作结果的功能
//void func(future<int>& fu)
//{
// cout << 11 << endl;
// cout << fu.get() << endl; // fu.get()等待异步执行结束,并获取返回值
// cout << 22 << endl;
//}
//
//int main(void)
//{
// std::promise<int> prom;
// future<int> fu = prom.get_future();
// std::thread th(func, ref(fu));
// this_thread::sleep_for(chrono::seconds(3));
// prom.set_value(999);
// th.join();
//
//
// system("pause");
// return 0;
//}
// 异步调用最主要的三个类: std_future、std::promise、std::packaged_task
//int func(int value)
//{
// cout << "arg=" << value << endl;
// return value - 1;
//}
//
//int main(void)
//{
// packaged_task<int(int)> task(func);
// future<int> ret = task.get_future();
// thread th(move(task), 10);
// cout << "ret=" << ret.get() << endl;
//
// th.join();
//
// system("pause");
// return 0;
//}
int fun()
{
// 休眠5s
this_thread::sleep_for(chrono::seconds(5));
return 999;
}
int main(void)
{
// 异步执行,内部创建一个thread
future<int> fun1 = async(launch::async, fun);
future_status status = future_status::deferred;
do {
// 等待并获取异步执行状态
status = fun1.wait_for(chrono::milliseconds(1000));
switch (status)
{
case std::future_status::ready:
cout << "finished" << endl;
break;
case std::future_status::timeout:
cout << "timeout" << endl;
break;
case std::future_status::deferred:
cout << "is not start" << endl;
break;
default:
cout << "is error" << endl;
break;
}
} while (status != future_status::ready);
cout << "ret = " << fun1.get() << endl;
system("pause");
return 0;
}
C++11中std::thread/std::async简单使用
最新推荐文章于 2024-04-02 11:45:19 发布