#include
#include
using namespace std;
std::future 提供访问操作结果的功能
//void func(future& fu)
//{
// cout << 11 << endl;
// cout << fu.get() << endl; // fu.get()等待异步执行结束,并获取返回值
// cout << 22 << endl;
//}
//
//int main(void)
//{
// std::promise prom;
// future 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 task(func);
// future 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 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;
}