C++11多线程之future(一)
2024-09-17 11:57:46
// ConsoleApplication5.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include<random>
#include<iostream>
#include<vector>
#include<thread>
#include<algorithm>
#include<future>
using namespace std; class A
{
public:
void mythread()
{
cout << "子线程开始了,id为:" << this_thread::get_id() << endl;
this_thread::sleep_for(chrono::seconds(5));
cout << "子线程结束了" << endl;
}
};
int main()
{
A a;
//future<void> s = async(&A::mythread,&a);
cout << "主线程的id:" << this_thread::get_id() << endl;
//一旦闯入了第一个参数launch::deferred,如果不调用get()或者wait,那么子线程不会被调用.
future<void> s = async(launch::deferred,&A::mythread, &a);
//wait_for()在这里的等待
//如果上面的async()函数的第一个参数为launch::deferred,那么这里的wait_for根本不会执行,直接执行接下来的语句
future_status status = s.wait_for(chrono::seconds(6));
if (status==future_status::timeout)
{
cout << "超时了" << endl;
}
else if (status ==future_status::ready)
{
cout << "子线程执行完毕了" << endl;
}
else if (status == future_status::deferred)
{
//只有当async()的第一个参数为launch::deferred时,才会执行到这里
cout << "子线程被延迟执行了" << endl;
s.get();//子线程一直被延迟到这里才开始执行,一旦延迟,系统也不会创建一个新的线程,而是在主线程中进行调用。
}
return 0;
}
最新文章
- SqlServer查询表中各列名称、表中列数
- HTML5 Web app开发工具Kendo UI Web中如何绑定网格到远程数据
- Java篇-File类之常用操作
- JavaScript强化教程——JavaScript 总结
- 收不到Win10正式版预订通知?一个批处理搞定
- IOS 网络浅析-(十三 SDWebImage 实用技巧)
- 一个类似bootstrap的foundation
- 【bz2002】弹飞绵羊
- 用pycharm开发django项目示例
- android使用友盟第三方自动更新/手动更新
- Graphical Analysis of German Parliament Voting Pattern
- 四、什么是vuex
- DIV内文字两端对齐
- kali linux 网络渗透测试学习笔记(一)Nmap工具进行端口扫描
- js分析 邮箱地址加密 [email protected]
- C#File类常用文件操作以及一个模拟的控制台文件管理系统
- JQuery案例一:实现表格隔行换色
- JAVA核心技术I---JAVA基础知识(抽象类和接口)
- nginx 内置变量
- django 验证码实现
热门文章
- AcWing3544. 寻找变化前的01序列
- Win8/Win10 Ctrl+Alt+方向键 屏幕显示翻转解决办法
- 【LeetCode】437. Path Sum III 解题报告(Python)
- 【LeetCode】538. Convert BST to Greater Tree 解题报告(Python)
- 【LeetCode】721. Accounts Merge 解题报告(Python)
- Fence(poj1821)
- 3027 - Corporative Network
- Brute-force Algorithm(hdu3221)
- 如何利用Python实现Office在线预览
- visual studio code的python编程中遇到的SyntaxError:invalid syntax问题的原因和解决办法