栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

#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;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968476.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号