C++11中std::thread/std::async简单使用

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值