关于c++11中的thread库
c++11中新支持了thread这个库,常见的创建线程、join、detach都能支持。
join是在main函数中等待线程执行完才继续执行main函数,detach则是把该线程分离出来,不管这个线程执行得怎样,往下继续执行main函数。
join操作会等待线程执行完毕,然后回收该线程资源,detach操作则不会等待线程完成,线程资源的回收由用init进程完成。(感谢https://www.cnblogs.com/liangjf/p/9801496.html的分享)
下面给出两个例子,一个是普通函数放在线程里面执行,另一个是类成员函数放在线程里面执行。
一、普通函数放在线程里面执行
#include<iostream>
#include<thread>
using namespace std; void compute(int *a,int *b,int* c)
{
this_thread::sleep_for(chrono::seconds(5));
*c=*a+*b;
}
int main()
{
int a=1,b=2,c=10;
int *a1=&a,*b1=&b,*c1=&c;
thread t1(compute,a1,b1,c1);//thread重载形式比较多,这里是一种重载方式。函数地址、三个参数
t1.join();//如果是join,那么等待5秒之后,返回c为3,;如果是detach,那么cout不会等待5秒,而是输出c为10,然后结束main函数
cout<<c<<endl;
return 0;
}
二、类成员函数放在线程里面执行
class class1
{
public:
void compute(int *a,int *b,int *c)
{
this_thread::sleep_for(chrono::seconds(5));
*c=*a+*b;
}
thread computethread(int *a,int *b,int *c)
{
return thread(&class1::compute,this,a,b,c);//返回一个thread类型,创建完thread之后,就开始执行线程中的函数
//thread重载类型比较多,这里是一种重载方式。函数地址、指针this、三个参数
}
};
int main()
{
int a=1,b=2,c=10;
int *a1=&a,*b1=&b,*c1=&c; class1 class11;
thread t1=class11.computethread(a1,b1,c1);//调用类中的函数
t1.join();//等待5秒,然后c为3
cout<<c<<endl;
return 0;
}
关于c++11中的thread库的更多相关文章
- C++11中std::move的使用
std::move is used to indicate that an object t may be "moved from", i.e. allowing the effi ...
- 漫谈C++11 Thread库之原子操作
我在之前一篇博文<漫谈C++11 Thread库之使写多线程程序>中,着重介绍了<thread>头文件中的std::thread类以及其上的一些基本操作,至此我们动手写多线程程 ...
- 漫谈c++11 Thread库之使写多线程程序
c++11中最重要的特性之一就是对多线程的支持了,然而<c++ primer>5th却没有这部分内容的介绍,着实人有点遗憾.在网上了解到了一些关于thread库的内容.这是几个比较不错的学 ...
- C++11中多线程库
一.Linux 线程API 线程是在操作系统层面支持的,所以多线程的学习建议还是先找一本linux系统编程类的书,了解linux提供线程的API,了解使用线程设计程序的基本操纵.完全使用系统调用编写多 ...
- c++11 Thread库写多线程程序
一个简单的使用线程的Demo c++11提供了一个新的头文件<thread>提供了对线程函数的支持的声明(其他数据保护相关的声明放在其他的头文件中,暂时先从thread头文件入手吧),写一 ...
- (原创)c++11中的日期和时间库
c++11提供了日期时间相关的库chrono,通过chrono相关的库我们可以很方便的处理日期和时间.c++11还提供了字符串的宽窄转换功能,也提供了字符串和数字的相互转换的库.有了这些库提供的便利的 ...
- Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)
昨天练车时有一MM与我交替着练,聊了几句话就多了起来,我对她说:"看到前面那俩教练没?老色鬼两枚!整天调戏女学员."她说:"还好啦,这毕竟是他们的乐趣所在,你不认为教练每 ...
- C++11多线程std::thread的简单使用
在cocos2dx 2.0时代,我们使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上.但在cocos2dx 3.0中并未发现有pthread的支持文件,原来c++11中已经拥有 ...
- C++11中的mutex, lock,condition variable实现分析
本文分析的是llvm libc++的实现:http://libcxx.llvm.org/ C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装.不 ...
随机推荐
- 绑定checkedComboBox
using System; namespace CommonLib{ /// <summary> /// CommonCode 的摘要说明. /// </summary> [S ...
- js正则积累
判断是否为数字 function isNumber(val){ var regPos = /^\d+(\.\d+)?$/; //非负浮点数 var regNeg = /^(-(([0-9]+\.[0- ...
- Zabbix告警脚本-短信
[root@iot-svndata02 bin]# cat zbsms.sh #!/bin/sh #curl http://221.179.180.137:8080/smsaServer/lkSend ...
- django mysql 数据库配置
在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库. DATABASES = { 'default': { 'ENGINE': 'django.db. ...
- Windows Server 2016离线安装.NET Framework 3.5
windows server 2016默认是不安装.netframework3.5的,可以在添加删除程序中单独添加.但是有时候系统安装文件不在的时候,找不到安装程序就不能安装成功. 这时候单独下载do ...
- 516. Longest Palindromic Subsequence最长的不连续回文串的长度
[抄题]: Given a string s, find the longest palindromic subsequence's length in s. You may assume that ...
- gdb调试技巧 找到php执行进程当前执行的代码
假设线上有一段php脚本,突然在某天出问题了,不处理但是进程没有退出.这种情况可能是异常休眠或者是有段死循环代码,但是我们怎么定位呢,我们这个时候最想知道的应该是这个脚本在此刻在做什么吧.这个是gdb ...
- jsp相关笔记(一)
1.在html中调整两个<p>标签之间的间距,可以用margin属性: p { margin: 0.2em 0;} 2.在jsp中要对页面分成上.左.右三栏时,可以用<framese ...
- 微信小程序设置背景铺满全屏
参考方法: 新版本升级取消了默认page的100%的特性 需要在app.wxss文件中加入如下代码: page{ height:100%; }
- Python(四) 列表元组