忘了为啥之前查的用上bind了,把项目搞完之后终于有时间建个小工程仔细试下怎么用。

Case 1 : 根据类内函数创建thread

class A
{
public:
 A();
 ~A();
void run(int i) {
  cout << i << endl;
 }
void thread_run() {
  for (int i = 0; i < 5; ++i) {
   thread t(&A::run, this, i);
   t.join();
  }
 }
};

int main() {

A a;
 a.thread_run();

return 0;
}

Case 2 : 在类外根据某一个类的函数创建thread

class A
{
public:
 A();
 ~A();
void run(int i) {
  cout << i << endl;
 }
};

int main() {

A a;
 for (int i = 0; i < 5; ++i) {
  thread t(&A::run, &a, i);
  t.join();
 }

return 0;
}

Case 3 : 在一个类中根据另一个类的函数创建thread

class A
{
public:
 A();
 ~A();
void run(int i) {
  cout << i << endl;
 }
};
class B
{
public:
 B();
 ~B();
void run() {
  A a;
  for (int i = 0; i < 1000; ++i) {
   thre.fdad t(&A::run, &a, i);
t.join();
  }
 }
};
int main() {
A a;
 B b;
 b.run();
return 0;
}
居然都是完全没问题的!!!我就奇怪了当初在工程里为毛怎么都不行。
注意点大概如下:
1. thread的第一个参数一定是 &类名::函数名 的形式
2. thread的第二个参数一定是类实例的指针
3. thread的之后的参数是函数所需要的参数
另外这样for循环创建的thread一定是执行完一个线程才创建下一个线程的,如果想要线程一起创建,需要先用一个vector把创建的thread存起来(千万不能直接存实例,因为vector在push_back时会再次构造),之后再一个for循环一起join;或者直接把join改成detach。
比较坑的地方可能就是thread传入类的函数和全局函数或者static函数时,参数是有区别的(后两个不需要类实例的指针),可能就是因为这个才让我当初怎么搞都没搞通吧。

c++11 thread 类内使用方法和跨类使用方法相关推荐

  1. c++学习笔记之基础---类内声明函数后在类外定义的一种方法

    在C++的"类"中经常遇到这样的函数, 返回值类型名 类名::函数成员名(参数表){ 函数体.} 双冒号的作用 ::域名解析符!返回值类型名 类名::函数成员名(参数表) { 函数 ...

  2. static方法不能直接访问类内的非static变量和不能调用this,super语句分析

    大家都知道在static方法中,不能访问类内非static成员变量和方法.可是原因是什么呢? 这首先要从static方法的特性说起.static方法,即类的静态成员经常被称为"成员变量&qu ...

  3. 理解Python中的类对象、实例对象、属性、方法

    class Animal(object): # 类对象age = 0 # 公有类属性__like = None # 私有类属性def __init__(self): # 魔法方法self.name = ...

  4. 毕设前期准备——调制信号+聚类+信号预处理+类内类间识别+星座图模块

    确定相关指标 1.调制信号的确定 2.聚类 3.信号预处理 1.码元速率估计 2.定时估计 4.类间和类内识别 5.星座图模块 1.调制信号的确定 不同的识别算法通过提取不同的特征值,适用的信号种类也 ...

  5. 在类内定义成员函数、在类外定义成员函数、计算长方体的体积【C++面向对象编程类的使用经典案例】

    文章目录 一.在类内定义成员函数 二.在类外定义成员函数(使用符号::) 三.计算3个长方体的体积(class成员函数) 一.在类内定义成员函数 #include <iostream> u ...

  6. 小白对于学习对象和类的总结,定义一个圆柱体类Cylinder,并创建相应的对象,然后计算圆柱体的底面积和面积.

    类和对象 类:类的概念就是让程序设计能更清楚卖出日常生活中的事物,也可以理解为对一类事物的统称包含对于属性描述和行为描述!注解:属性描述:描述当前类有哪些属性.行为描述:描述当前有哪些行为.举例: 以 ...

  7. 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)

    27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...

  8. 7.1.3 Python进阶 《函数》定义、调用,参数,返回值《面向对象》概念,类,实例,对象,属性,方法《模块、包》导入,自定义,常用内置:datatime,time,random,os,sys

    目录 ======== 第四部分 Python进阶 ======== 第一节 函数 4.1.1 函数定义及调用 4.1.2 函数的参数 4.1.3 函数的返回值 第二节 面向对象 4.2.1 面向对象 ...

  9. 1023day5:class类属性方法、每次执行类属性+1、内建模块、时间装饰器wrapper、面向对象__slots__方法:限制类的属性等基础知识、正则表达式基础知识、多态鸭子类型

    文章目录 一.类class 1.Python类class 属性 方法 2.类的构造方法__init__() 3.每次执行一次类的属性+1 二.模块 1.内建模块 2.第三方模块 3.定义自己的模块 三 ...

最新文章

  1. SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点
  2. oracle的imp和exp
  3. Python学习笔记:I/O编程
  4. 3步理清Python数据分析关键点,新手必看
  5. 如何一秒钟从头构建一个 ASP.NET Core 中间件
  6. Open***+ldap配置过程
  7. FMS3 客户端call服务器端
  8. 卖菜201809-1
  9. Projector的用法
  10. 为何耐得住寂寞更容易成功
  11. 一叶知春秋,一茗品浮生
  12. 纯css实现乌云密布的天气图标
  13. 案例-------ZARA和HM
  14. 2021-10-01
  15. 20189220 余超《Linux内核原理与分析》第九周作业
  16. 前端基础第三天项目 大事件后台管理系统
  17. 树莓派不插HDMI不能开机的解决方法
  18. 2012网页服务器搭建教程,服务器2012搭建vps教程
  19. 计算机课程中常用的高中数学公式
  20. 黑马旅游网完整代码_JavaWeb黑马旅游网 视频 下载

热门文章

  1. Gululu互动水杯创意亮相第18届CBME
  2. 微信公众号 网页授权实现
  3. linux glance命令,glance的用法
  4. 初学rides———rides指令大全
  5. 手游lol登入显示服务器较多,《lol手游》访问人数过多怎么办 访问人数过多解决方法...
  6. 发什么作品容易涨粉丝
  7. 计算机网络热门面试题总结(附标准答案)
  8. 淘宝撸猫瓜分20亿红包追线球赢喵币有哪些技巧?
  9. Waiting for changelog lock
  10. lineheight使图片多行文字垂直居中