类的成员函数中创建线程_C++之类成员函数作为std::thread的线程处理函数

类定义

  1. void threadFn(int max);方法是DefineClass类中定义的私有的方法,可以作为thread的线程处理函数;
  2. void startThread(int index);方法用来给外部调用,在类中启动线程;
class DefineClass {public:    DefineClass();    ~DefineClass() = default;        void startThread(int index);private:    void threadFn(int max);};

类实现

  1. startThread函数中,起一个局部的std::thread,并调用detach方法;其中std::thread传入有std::bind生成的对象;
  2. std::bind带有3个参数:第一个参数标识类成员函数;第二个参数this代表类成员,thread可以通过this找到类成员函数地址;第三个参数表示传入成员函数的参数;
  3. 最后在成员函数中实现内容,其保证是在另一个线程执行的;
#include "DefineClass.h"#include #include #include DefineClass::DefineClass() { }void DefineClass::startThread(int index) {    std::thread innerThread = std::thread(std::bind(&DefineClass::threadFn, this, index));    innerThread.detach();}void DefineClass::threadFn(int max) {    int index = max;    while(index > 0) {        printf("Thread index %d", index--);    }}

调用

  1. 外部通过类对象defineClass调用startThread函数,执行示例;
#include #include #include #include #include "DefineClass.h"static volatile bool exitApp = false;static void sigHandle(int sig) {    if (sig == SIGINT || sig == SIGTERM) {        printf("received signal %d, exit application.", sig);        exitApp = true;    }}int main(int argc, char **argv) {    printf("Test Demo Start");    signal(SIGINT, sigHandle);    signal(SIGTERM, sigHandle);    auto defineClass = DefineClass();    defineClass.startThread(5);    while(!exitApp) {        std::this_thread::sleep_for(std::chrono::milliseconds(1000));    }    printf("Test Demo Start");    return 0;}

打印如下

27155c0921b20acdfedf8d5de8555b73.png

Linux上编译执行结果

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值