参考博文:C++ 11 thread类多线程笔记

  在每个C++应用程序中,都有一个主线程(main函数)。在C++11标准中,创建线程可以通过类std::thread来创建。该类需要包含头文件:

初始化std::thread类对象,有三种参数传递方式:

  函数指针
  类对象
  lambda表达式

例如,可以这样创建线程对象:

线程对象创建后,就可以并行地执行传递的回调函数。
如果在退出前,想等待所有线程结束再退出,可以使用join()函数。
线程在运行过程中,如果区分线程呢?

  每个线程都有自己的线程ID,通过std::thread创建的线程可以使用std::thread::get_id()来获取线程ID。

比如获取当前线程ID:

  std::this_thread::get_id()

如果std::thread没有关联任何线程对象,那么get_id()会返回一个std::thread的默认构造函数对象。

1. 使用函数指针创建线程


运行结果:

附上例代码:

//小问学编程
#include<iostream>
#include<thread>
using namespace std;void thread_function()
{for(int i=0;i<10000;i++)cout<<"thread function Executing"<<endl;
}int main()
{thread threadObj(thread_function);for(int i=0;i<10000;i++)cout<<"Display From MainThread"<<endl;threadObj.join();cout<<"Exit of Main function"<<endl;return 0;
}

2. 使用类对象创建线程


运行结果:

附上例代码:

//小问学编程
#include<iostream>
#include<thread>
using namespace std;class DisplayThread
{public:void operator()(){for(int i=0;i<10000;i++)cout<<"thread function Executing"<<endl;}
};int main()
{thread threadObj((DisplayThread()));for(int i=0;i<10000;i++)cout<<"Display From MainThread"<<endl;threadObj.join();cout<<"Exit of Main function"<<endl;return 0;
}

3. 使用lambda表示创建线程


运行结果:

附上例代码:

//小问学编程
#include<iostream>
#include<thread>
using namespace std;int main()
{int x=9;thread threadObj([]{for(int i=0;i<10000;i++)cout<<"Display Thread Executing"<<endl;});for(int i=0;i<10000;i++)cout<<"Display From Main Thread"<<endl;threadObj.join();cout<<"Exiting from Main Thread"<<endl;return 0;
}

C++11多线程创建的三种方法相关推荐

  1. 50、多线程创建的三种方式之实现Runnable接口

    实现Runnable接口创建线程 使用Runnable创建线程步骤: package com.sutaoyu.Thread;//1.自定义一个类实现java.lang包下的Runnable接口 cla ...

  2. 多线程——多线程同步的三种实现方法

    当使用多线程访问同一个资源的时候,非常容易出现线程安全的问题(例如,当多个线程同时对一个数据进行修改的时候,会导致某些线程对数据的修改丢失). 因此,需要采用同步机制来解决这种问题.而Java主要提供 ...

  3. Python创建多线程的三种方法

    Python创建多线程的三种方法 thread模块函数式创建线程 继承threading类创建多线程 threading模块函数式创建线程 使用总结 thread模块函数式创建线程 调用thread模 ...

  4. eclipse创建springboot项目的三种方法

    eclipse创建springboot项目的三种方法 方法一 安装STS插件 安装插件导向窗口完成后,在eclipse右下角将会出现安装插件的进度,等插件安装完成后重启eclipse生效 新建spri ...

  5. Java 创建线程的三种方法比较

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...

  6. JavaEE多线程基本概念 及 创建多线程程序的三种方式

    Hello! 大家好.(非常平庸的开场白 习惯一下).此篇博客是我的"处女作",因为是第一次写博客,在文章格式以及文章内容可能会有许多问题和缺陷.欢迎各位大神对我的文章进行指正!我 ...

  7. JAVASE基础模块三十五( 线程 线程创建的第一种方法 以及线程的一些方法)

    JAVASE基础模块三十五( 线程 线程创建的第一种方法 以及线程的一些方法) 线程 首先要清楚的是 线程依赖于进程 进程 是 正在运行的应用程序 一个正在运行的应用程序 是个进程 这个应用程序又要执 ...

  8. 创建字符设备的三种方法

    将创建字符设备的三种方法记录一下,以便以后参考. 1. 使用早期的register_chardev()方法 #include<linux/kernel.h> #include<lin ...

  9. oracle创建数据库的三种方法

    新建Oracle数据库三种方法: 1.通过运行Oracle Database Configuration Assistant创建配置或删除数据库(也可在命令行下输入dbca): 2.用命令行的方式建立 ...

最新文章

  1. python类的成员函数_python特殊成员函数
  2. ubuntu12.04+fuerte 下跑通lsd-slam——数据集
  3. 此选项卡已恢复的处理过程
  4. 用 C 语言开发一门编程语言 — 抽象语法树
  5. CeneOS中使用Docker安装Gitlab
  6. 记我的一次电话面试 (转)
  7. linux—用nc命令监控检测服务器端口
  8. linux 运行cmd文件,cmd文件如何在虚拟linux下运行
  9. 鹅厂二面,Nginx回忆录
  10. HDU 3555 Bomb (数位DP)
  11. winform list集合怎么 in过滤_Java List集合遍历数据的八种方式
  12. 阿里云技术白皮书_2019年云计算发展白皮书发布 阿里云保持优势成亚太最大云服务商...
  13. 科大讯飞刘聪:如何持续保持语音识别技术的领先
  14. java word jar包_java操作word书签生成word模板不用jar包
  15. 简单的网络打印的配置与管理(IP地址...)
  16. Vue:运行项目时报错:Module not found: Error: Can't resolve 'sass-loader' in
  17. python ean13条形码的验证_(转)基于SQL的EAN13、ENA8条形码校验位生成
  18. 计算机专硕考数一英一的学校有哪些,这所211专硕改考数一英一!部分院校初试科目调整...
  19. 月经周期28天健康日历表
  20. 数学笔记31——幂级数和泰勒级数

热门文章

  1. Spring集成JDBC组件开发
  2. jmeter压力测试linux,JMeter压力测试
  3. sp+Ssh+Mysql实现的简单的企业物资信息管理
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的网络投票系统
  5. 阶段1 语言基础+高级_1-2 -面向对象和封装_11使用对象类型作为方法的返回值
  6. Judy Beta 第10天
  7. 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(二分写法)
  8. android中自定义的dialog中的EditText无法弹出输入法解决方案
  9. iOS - Animation 八种方法
  10. 【设计模式】—— 备忘录模式Memento