C++多线程基础学习笔记(八)
shared_futrue和futrue_status的用法
shared_futrue是一个类模板,类似于futrue,不同的是它的成员函数get()可以使用多次,因为是复制数据,而futrue的get()则是转移数据,使用一次之后,就失效了。
futrue_status是一个枚举类型,用来判断某个线程是否在规定时间执行完。
#include <iostream>
#include <future>
#include <Windows.h>
using namespace std; int mythread()
{
cout << "my thread:" << std::this_thread::get_id() << " start" << endl;
cout << "waiting" << endl;
Sleep();
cout << "my thread:" << std::this_thread::get_id() << " end" << endl;
return ;
}
int main()
{
// future_status的用法
cout << "main thread:" << std::this_thread::get_id() << " start" << endl;
std::future<int> result = std::async(std::launch::async, mythread);
std::future_status status = result.wait_for(std::chrono::seconds()); //假设线程执行时间为6秒
if (status == std::future_status::timeout)
cout << "线程未执行完,超时了" << endl;
else if (status == std::future_status::ready)
cout << "线程成功执行" << endl;
else
cout << "线程被延迟执行" << endl; //仅当async的第一个参数为std::launch::async才有可能出现 // shared_future的用法,特点是它的成员函数get()是复制数据,所以get()可以使用多次
std::packaged_task<int(void)> pt(mythread);
thread t(std::ref(pt));
t.join();
std::shared_future<int> sf = pt.get_future();
cout << sf.get() << endl;
cout << sf.get() << endl; cout << "main thread:" << std::this_thread::get_id() << " end" << endl;
system("pause");
return ;
}

顺便简单介绍std:;atomic的用法,它是一个类模板,使用它称为原子操作,和互斥量作用一样,同样是保护操作数据,不同的是原子操作是针对一个变量,互斥量是针对一段代码。
使用方法:std::atomic<int> count = 0; //声明一个int类型的变量,在多个线程操作该数据时,相当于每个线程操作数据的时候会给count加锁,保证了其他线程不会干扰它,保护了数据。
C++多线程基础学习笔记(八)的更多相关文章
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- C++多线程基础学习笔记(四)
一.创建多个子线程 前面三章讲的例子都是只有一个子线程和主线程,然而实际中有多个子线程.那么下面介绍如何创建多个子线程. #include <iostream> #include < ...
- C++多线程基础学习笔记(一)
下面分三个方面多线程技术的必须掌握一些基本知识. 1.进程 2.线程 3.并发 (1)进程 一个可执行程序运行起来了,即为创建了一个进程.如在电脑上打开了word,就创建了一个word进程,打开QQ, ...
- loadrunner基础学习笔记八-分析场景
analysis会话的目的是查找系统的性能问题,然后找出这些问题的根源 如: 是否达到了预期的测试目标,在负载下对用户终端的事务响应时间是多少 是否符合sla还是偏离了目标 事务的平均响应时间是多少 ...
- JDBC二查询(web基础学习笔记八)
一.建立数据库 --创建news表空间 CREATE TABLESPACE tbs_news DATAFILE 'F:\ORACLE\news.dbf' SIZE 10M AUTOEXTEND ON; ...
- C++多线程基础学习笔记(十)
一.Windows临界区的基本用法 CRITICAL_SECTION my_winsc; //定义一个Windows的临界区,相当于一个mutex变量 InitializeC ...
- C++多线程基础学习笔记(九)
一.std::atomic续谈 上一章说到std::atomic是针对一个变量的,这里补充一下针对的变量操作一般是++,+=,--,&=等等运算 .以下这种不可取:a=a+1; 二.std:: ...
- C++多线程基础学习笔记(七)
一.std::async和std::future的用法 std::async是一个函数模板,std::future是一个类模板 #include <iostream> #include & ...
- C++多线程基础学习笔记(六)
condition_variable.wait.notifiy_one.notify_all的使用方式 condition_variable:条件变量 wait:等待被唤醒 notify_one:随机 ...
随机推荐
- 嵌入式实时操作系统VxWorks入门――开发环境构建[转]
VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通 信.军事.航空.航天等高精尖技术及实时性 ...
- Cortex-M3 入门指南(三):时钟总线与复位时钟控制器
[reset clock control 复位和时钟控制器] 时钟信号对于处理器非常重要,比如我们熟悉的 CPU 就是由时钟信号驱动的,而主频就是内核的的时钟信号频率.Cortex-M3 有着复杂的 ...
- AtCoder AGC004E Salvage Robots (DP)
题目链接 https://atcoder.jp/contests/agc004/tasks/agc004_e 题解 本题的难度不在于想到大体思路,而在于如何把代码写对.. 首先我们可以不让机器人动,让 ...
- Vue_(基础)Vue中的指令
Vue.js中文文档 传送门 Vue的指令:其实就是单个JavaScript表达式,一般来说是带有v-前缀 Vue指令: v-model:数据双向绑定: v-text:以纯文本方式显示数据: v- ...
- 【黑马Javaweb】1.1Junit单元测试
黑马第一天学习 今日内容 Junit单元测试: 测试分类: Junit使用:白盒测试 今日内容 1.1Junit单元测试 1.2.反射 1.3.注解 Junit单元测试: 测试分类: 1.黑盒测试:不 ...
- SqlHelper 类
// 一个自用的 SqlHelper 类 利用了刚学习到的 扩展方法 http://technet.microsoft.com/zh-cn/bb383977 /// <summary> / ...
- Json文件删除元素
方法1:delete 注意,该方法删除之后的元素会变为null,并非真正的删除!!! 举例: 原json: { "front" : { "image" : [ ...
- [go]beego获取参数/返回参数
获取前端传来的参数 获取数据并转为对应的类型 - ?id=111&id=122 c.GetInt("id") int,111 - ?id=111&id=122 c. ...
- [go]从os.Stdin探究文件类源码
咋一看go的标准输入输出函数有一箩筐. 细究了一下. - 从标准输入获取输入 fmt.Scan 以空白(空格或换行)分割,值满后无结束 fmt.Scanln 以空格作为分割,遇到换行结束 fmt.Sc ...
- 编写javad代码实现使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符
package com.loaderman.test; import java.util.HashSet; import java.util.Scanner; public class Test2 { ...