c++11在语言层面上提供了对thread的支持,由于不同的平台提供了不同线程API,在语言层面提供了对thread的支持可以大大的减小代码移植的工作量。

  • thread的构造函数参数为函数名和可变参数,请看栗子
  • thread的默认构造函数创建一个没有执行过程的线程,该线程既不可以被join,也没有id,如果join将会产生terminated
  • 不可以被拷贝和赋值,拷贝构造函数和赋值函数都被thread声明为private函数,无法调用,你可能会说既然这样那默认构造函数还有什么用,别忘了c++11的新特性,move构造函数还可以用的呀,下面的栗子中将有展示
  • 一个thread对象在join了之后,将不能再join,joinable为false,同时get_id也为0
  • 可以用joinable函数来判断thread是否可以被join
  • detach可以和主线程分离,主线程将会失去控制权,经过实验主线程结束后detach的线程也结束,但是不会产生异常了
#include <iostream>
#include <thread>
#include <stdlib.h>void sum(int a, int b) {std::cout<<a + b<<std::endl;
}void mySleep() {std::this_thread::sleep_for(std::chrono::milliseconds(1000*30));
}int main() {std::thread t(sum, 99, 1);std::cout<<"t.joinable:"<<t.joinable()<<std::endl;std::cout<<"t.get_id "<<t.get_id()<<std::endl;t.join();std::cout<<"after t.join"<<std::endl;std::cout<<"t.joinable:"<<t.joinable()<<std::endl;std::cout<<"t.get_id "<<t.get_id()<<std::endl;std::thread emptyTh;//std::thread t1 = emptyTh;//Error//std::thread t2(emptyTh);//Errorstd::cout<<"emptyTh.joinable:"<<emptyTh.joinable()<<std::endl;std::cout<<"emptyTh.get_id "<<emptyTh.get_id()<<std::endl;//emptyTh.join();//terminatedstd::thread t3(mySleep);t3.detach();return 0;
}

this_thread

std::this_thread是用在线程内部调用的,主要有以下api

  • get_id获取当前线程id
  • yield让出线程自己的cpu
  • sleep_for睡眠绝对时间
  • sleep_utile睡眠至绝对时间

下面直接粘贴官方栗子了

// this_thread::yield example
#include <iostream>       // std::cout
#include <thread>         // std::thread, std::this_thread::yield
#include <atomic>         // std::atomicstd::atomic<bool> ready (false);void count1m(int id) {while (!ready) {             // wait until main() sets ready...std::this_thread::yield();}for (volatile int i=0; i<1000000; ++i) {}std::cout << id;
}int main ()
{std::thread threads[10];std::cout << "race of 10 threads that count to 1 million:\n";for (int i=0; i<10; ++i) threads[i]=std::thread(count1m,i);ready = true;               // go!for (auto& th : threads) th.join();std::cout << '\n';return 0;
}

文档请看:http://www.cplusplus.com/reference/thread

c++11 thread相关推荐

  1. c++11 thread类的简单使用

    一个thread对象就代表一个线程执行,当对象创建完成后,线程函数就开始执行,下面这段话是c++11的thread类介绍. An initialized thread object represent ...

  2. g++编译c++11 thread报错问题 及c++多线程操作

    测试代码thread.cpp #include <thread> #include <iostream> using namespace std;void run(int n) ...

  3. C++11 thread使用

    C++11标准添加了thread.h头文件,对多线程类进行了封装,更易于用户去使用. 简单介绍一下thread.h的使用 多线程的基本使用 首先是最基础的调用多线程的方式 #include <i ...

  4. c++11 thread 类内使用方法和跨类使用方法

    忘了为啥之前查的用上bind了,把项目搞完之后终于有时间建个小工程仔细试下怎么用. Case 1 : 根据类内函数创建thread class A { public:  A();  ~A(); voi ...

  5. c++11多线程学习笔记之一 thread基础使用

    没啥好讲的  c++11  thread类的基本使用 #include "stdafx.h" #include <iostream> #include <thre ...

  6. 05用线程类Thread开启线程

    1.,密封类不能被继承 (thread) l类的内部的开启了,没有参数 2.要有参数 一定是object类型,(记住了) 3.自己创造线程 没有参数的时候 4.自己创造线程 有参数 用Thread开启 ...

  7. muduo之Thread

    muduo也对线程进行了封装,下面看一下实现. Thread.h // Use of this source code is governed by a BSD-style license // th ...

  8. java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍

    (原创,转载请说明出处!谢谢--http://www.cnblogs.com/linguanh/) 此文目的为了帮助大家较全面.通俗地了解线程 Thread 相关基础知识! 目录: --线程的创建: ...

  9. Thread类源码剖析

    目录 1.引子 2.JVM线程状态 3.Thread常用方法 4.拓展点 一.引子 说来也有些汗颜,搞了几年java,忽然发现竟然没拜读过java.lang.Thread类源码,这次特地拿出来晒一晒. ...

最新文章

  1. P2574 XOR的艺术(线段树)
  2. 编译时异常和运行时异常的区别
  3. php添加linux定时任务,PHP与Linux定时任务
  4. 不要在递归中使用静态容器
  5. 1192 约瑟夫问题(1)
  6. python算法应用(五)——搜索与排名1(连接数据库及简单排名)
  7. Struts2 Problem Report: No result defined for action ... and result exception
  8. 模型融合之stacking和blending
  9. 中国产品在越南如何落地?
  10. 开博了,微博太短,不适合,还是稀饭大的博客
  11. html如何改成花体英文字体,花体英文转换器可复制字体(附花体字发文技巧)...
  12. rpg学院 unity_Unity3d - RPG项目学习笔记(一)
  13. 当年我们一起追过的Java,Java SE 个人笔记
  14. flutter图标按钮_flutter 按钮封装 带图片的按钮,带边框的按钮,纯文字的按钮
  15. 如何判断一个多边形的环是逆时针还是顺时针
  16. keras非线性回归代码专题
  17. window修改host文件
  18. jQuery的模糊匹配
  19. (程序员情感三部曲之二)程序员如何找女朋友
  20. IntelliJ IDEA 电脑扩展分屏显示问题

热门文章

  1. 74LS147编码器高级应用-病房呼叫系统-Multisim仿真
  2. Python实现输入三个整数x,y,z,请把这三个数由小到大输出
  3. github板娘设置步骤
  4. 解决关于0 errors and 27 warnings potentially fixable with the `--fix` option.的问题
  5. Amesim车辆仿真--制动匹配理论二之同步附着系数
  6. EmEditor 添加代码格式化功能
  7. eshop电子商城,app
  8. 3个情人节表白网页在线生成(附最新阿里云扩容码)
  9. 用计算机如何算瓷砖菱形加工,瓷砖菱形块怎么计算切图解
  10. SUMO应用工具:OD2TRIPS