1 detach

脱离当前主线程,自由执行,乱序;

2 join()

等待模式,执行完再执行下一个

3 std::this_thread::get_id()

获取当前线程编号

4 std::thread::hardware_concurrency()

检测CPU有多少个核心

1 detach

脱离当前主线程,自由执行,乱序;

2 join()

等待模式,执行完再执行下一个

  1. #include <iostream>
  2. #include <thread>
  3.  
  4. void run(int num)
  5. {
  6. std::cout << "hello world" << num << std::endl;
  7. }
  8.  
  9. void main()
  10. {
  11. std::thread *p[];
  12.  
  13. for (int i = ; i < ; i++)
  14. {
  15. p[i] = new std::thread(run, i);//循环创建线程
  16. //p[i]->join();//等待模式,执行完再执行下一个
  17. p[i]->detach();//脱离当前主线程,自由执行,乱序;
  18. }
  19.  
  20. system("pause");
  21. }

1 join()

等待模式,执行完再执行下一个

2 std::this_thread::get_id()

获取当前线程编号

3 std::thread::hardware_concurrency()

检测CPU有多少个核心

  1. #include <iostream>
  2. #include <thread>
  3. #include <windows.h>
  4.  
  5. void msg()
  6. {
  7. MessageBoxA(, "对话框内容", "对话框标题", );//弹出对话框
  8. }
  9.  
  10. void main()
  11. {
  12. auto n = std::thread::hardware_concurrency();//检测CPU有多少个核心
  13. std::cout << n << std::endl;
  14.  
  15. std::cout << "thread=" << std::this_thread::get_id() << std::endl;//获取当前线程编号
  16.  
  17. std::thread thread1(msg);//创建多线程
  18. std::thread thread2(msg);
  19.  
  20. thread1.join();//开始执行,同时弹出2个对话框
  21. thread2.join();
  22.  
  23. system("pause");
  24. }

std::vector<std::thread *>threads;//创建一个数组,数组的元素数据类型是std::thread *

threads.push_back(new std::thread(msg));//创建线程,并添加到数组

  1. #include <iostream>
  2. #include <thread>
  3. #include <vector>
  4. #include <windows.h>
  5.  
  6. void msg()
  7. {
  8. MessageBoxA(, "对话框内容", "对话框标题", );//弹出对话框
  9. }
  10.  
  11. void main()
  12. {
  13. std::vector<std::thread *>threads;//创建一个数组,数组的元素数据类型是std::thread *
  14.  
  15. for (int i = ; i < ; i++)
  16. {
  17. threads.push_back(new std::thread(msg));//创建线程,并添加到数组
  18. }
  19.  
  20. for (auto th : threads)//遍历数组
  21. {
  22. th->join();//执行数组中的线程
  23. }
  24.  
  25. system("pause");
  26. }

threads.push_back(new std::thread(msgA, i));//创建线程,并添加到数组,传入参数i,进行通信

  1. #include <iostream>
  2. #include <thread>
  3. #include <vector>
  4. #include <windows.h>
  5.  
  6. void msgA(int num)
  7. {
  8. std::cout << std::this_thread::get_id() << " num=" << num << std::endl;//获取当前线程编号
  9. MessageBoxA(, "对话框内容", "对话框标题", );//弹出对话框
  10. }
  11.  
  12. void main()
  13. {
  14. std::vector<std::thread *>threads;//创建一个数组,数组的元素数据类型是std::thread *
  15.  
  16. for (int i = ; i < ; i++)
  17. {
  18. threads.push_back(new std::thread(msgA, i));//创建线程,并添加到数组,传入参数i,进行通信
  19. }
  20.  
  21. for (auto th : threads)//遍历数组
  22. {
  23. th->join();//执行数组中的线程
  24. }
  25.  
  26. system("pause");
  27. }

#include <thread>的更多相关文章

  1. 浅谈JSP中include指令与include动作标识的区别

    JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...

  2. Entity Framework 6 Recipes 2nd Edition(13-9)译 -> 避免Include

    问题 你想不用Include()方法,立即加载一下相关的集合,并想通过EF的CodeFirst方式实现. 解决方案 假设你有一个如Figure 13-14所示的模型: Figure 13-14. A ...

  3. error RC1015: cannot open include file 'afxres.h' 解决办法

    在为WindowsPhone8程序添加本地化的过程中遇到这个问题: 问题原因就是afxres.h文件缺失,下载它,放到VS安装目录下的VS\include目录下就可以了(选择目录的时候注意对应对版本) ...

  4. Mybatis常用总结:参数,返回,执行sql,include等

    1.参数注入1.1用#{0},#{1}的形式,0代表第一个参数,1代表第二个参数 public List<RecordVo> queryList(String workerId, Inte ...

  5. jsp中的@include与jsp:include区别详解

    1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include ...

  6. JSP中编译指令include与动作指令include的区别

    include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改, 否则视为已被修改.由于被包含的文件是在编译时才插入的,因此如 ...

  7. C/C++ 中的include

    当需要使用已有的方法或库时, 可以将它们的头文件#include进来. #include会在preprocess过程中被替换成它包含的代码. 头文件中包含了需要使用的函数/变量的声明. 当然声明与定义 ...

  8. 织梦多语言站点,{dede:include filename=''/}引入问题

    织梦模板include插入非模板目录文件出现"无法在这个位置找到"错误的解决办法 以下是dede V55_UTF8 查dede include标签手册 (3) include 引入 ...

  9. PHP 站点相对包含,路径的问题解决方法(include,require)

    以前看了,很多框架,基本上很少使用相对路径包含.而一般很多做php web站点,喜欢用相对路径. 认为这样,无论目录放到那里. 只要跟另外目录关系一致.那么就不会出现问题.如果一个站点,一般都认为,如 ...

  10. 如何让include标签包裹的布局置于屏幕最下方?

    如何让一个Layout 始终在屏幕的下方 我想让<include layout="@layout/bottom" />一直在屏幕下,怎么做? 1.相对布局中用属性  a ...

随机推荐

  1. python---__getattr__\__setattr_重载'.'操作

    #!coding:utf-8 class Person(object): def __init__(self,id): #定义一个名为ID的属性 self.ID=id def __getattr__( ...

  2. axis2 webservices 411错误解决办法

    错误:org.apache.axis2.AxisFault: Transport error: 411 Error: Length Required 可能会导致这个问题的原因: 1.访问地址经过端口映 ...

  3. 假数据自我添加测试--NSArray object

    一.列表假数据 //在.h文件里面定义node所包含实体类---1 struct listTestNode { NSString *image; NSString *name; }; //在.m实现文 ...

  4. 关于IE的兼容模式

    前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE8引入了文件兼容性.在IE6中引入一个增设的兼容性模式,文件兼容性使你能够在IE呈现你的网页时选择特定编译模式. 新的IE为了确保网页 ...

  5. Spring、整合Spring+JDBC

    首先引入Spring包和JDBC所使用到的包: 配置beans.xml步骤: 1.配置dataSource的属性 2.将DataSource交给DataSourceTransactionManager ...

  6. Struts2六、为应用指定多个配置文件

    为了使用Struts.xml更简洁,更利于维护,我们可以把Struts.xml要配置的Action信息分类别放在其他的XML文件中,使用include在struts.xml中加载这些文件: 将Web. ...

  7. nginx安装编译详解

    ./configure --prefix --with解释 http://zhidao.baidu.com/link?url=pksp8xh2OVbRS8_wUMv4ILpb7P6VVIU-NQVp6 ...

  8. android 的线程模型和AsyncTask

            android 的线程模型:当一个 android 的应用运行后,就会有一个 UI 的 main 线程启动 , 这是一个非常重要的线程,它负责把事件分派到相应的控件,其中就包括屏幕绘图 ...

  9. 项目积累——Blockingqueue,ConcurrentLinkedQueue,Executors

    背景 通过做以下一个小的接口系统gate,了解一下mina和java并发包里的东西.A系统为javaweb项目,B为C语言项目,gate是本篇须要完毕的系统. 需求 1. A为集群系统,并发较高,会批 ...

  10. 常用的sql server规范

    常见的字段类型选择1.字符类型建议采用varchar/nvarchar数据类型2.金额货币建议采用money数据类型3.科学计数建议采用numeric数据类型4. 自增长标识建议采用bigint数据类 ...