博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
effective c++ 之std::thread 绑定类函数
阅读量:5217 次
发布时间:2019-06-14

本文共 1077 字,大约阅读时间需要 3 分钟。

effective c++ 之std::thread 绑定类函数

问题:想用std::thread新开线程去执行一个类中的函数,编译报错。

代码示例(手写仅供参考)

1 class A { 2 public: 3     inline void start() { 4         std::thread run_thread(&A::real_run); 5         run_thread.join();     6     } 7     inline void real_run() { 8         std::cout << "real_run" << std::endl; 9     }10 }

以上代码会报错

解决方案:

1. 把想绑定的类函数设为static

    但是会引入新的问题,static方法不能使用类的非静态成员变量

    1.1 针对这一问题,解决方法如下: 给该静态成员函数传递this指针,通过this指针调用费静泰成员变量 

1 class A { 2 public: 3     inline void start() { 4         std::thread run_thread(&A::real_run, this); 5         run_thread.join();     6     } 7     inline void real_run(A *ptr) { 8         std::cout << "real_run" << ptr->data << std::endl; 9     }10    private:11         int data;12 }

 

2. 更为优雅的方案(个人认为比较好的方法)

  使用std::bind绑定方法和this指针 传递给thread

1 class A { 2 public: 3     inline void start() { 4         std::thread run_thread(std::bind(&A::real_run, this)); 5         run_thread.join();     6     } 7     inline void real_run() { 8         std::cout << "real_run" << std::endl; 9     }10 }

 

转载于:https://www.cnblogs.com/caoshiwei/p/6379687.html

你可能感兴趣的文章
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
事务备份还原分离附加
查看>>
JSch - Java实现的SFTP(文件上传详解篇)
查看>>
一些注意点
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
C#修饰符
查看>>
20.核心初始化之异常向量表
查看>>
[BSGS][哈希]luogu P3846 可爱的质数
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
iostat参数说明
查看>>
js 封装获取元素的第一个元素
查看>>
iOS 获取Home键指纹验证
查看>>
Python-Mac 安装 PyQt4
查看>>
P2571 [SCOI2010]传送带
查看>>
哈希表1
查看>>
用Data Url (data:image/jpg;base64,)将小图片生成数据流形式
查看>>
实验2-2
查看>>
C#初识
查看>>
String,StringBuffer与StringBuilder的区别?? .
查看>>
JavaScript(三) 数据类型
查看>>