美文网首页CPP
线程传递的函数是类方法

线程传递的函数是类方法

作者: 顽强的猫尾草 | 来源:发表于2018-08-10 09:21 被阅读8次

普通情况下,开启一个线程只需要把函数名作为第一个参数,函数参数跟在后面传进去就行了,如下形式:

void func(int a, string s) {
    ...
}
int main() {
    int aa = 1;
    string ss = "hello";
    thread t1(func, aa, ss);
}

但当 func 是类中的一个方法时,情况就有些变化,我们需要把函数用函数指针的形式传进去,同时还应该把类对象的地址跟在函数后面,如:

class C {
public:
    C() {};
    void func(int a, string s) { ... }
}
int main() {
    int aa = 1;
    string ss = "hello";
    C c;
    thread t1(&C::func, &c, aa, ss);
}

但是更好的写法是将类对象包成一个 shared_ptr 以防止栈帧溢出,然后用 shared_ptr 的 get() 方法获得裸指针传入新的线程:

int main() {
    int aa = 1;
    string ss = "hello";
    auto c = make_shared<C>();
    thread t1(&C::func, c.get(), aa, ss);
}

相关文章

  • 线程传递的函数是类方法

    普通情况下,开启一个线程只需要把函数名作为第一个参数,函数参数跟在后面传进去就行了,如下形式: 但当 func 是...

  • python基础(下)

    一、多线程 向线程的目标函数中传递参数 从python中启动其他的程序 二、类的简单使用 1.基础类 2.父类、子...

  • Java基础17-多线程

    概述 本文主要讲java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的线程函数用法等。首先让我们来了...

  • 单例模式的几种写法

    一、饿汉式--无法给单例对象的构造方法传递参数,且线程不安全 二、懒汉式--可以给构造函数传递参数,但线程不安全 ...

  • Java 多线程

    本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。在这之前...

  • java多线程

    本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...

  • StringBuffer

    类图: 类: 构造函数: append 方法带 synchronized 同步锁 (同时只有一个线程执...

  • Java 多线程

    多线程主要技术进程与线程线程状态阻塞状态分类线程的调度常用函数说明Thread类方法创建线程线程池线程安全向线程传...

  • Handler

    Handler机制: 是一个消息传递机制,作用是将子线程需要的UI操作,传递到UI线程执行,保证线程安全。 相关类...

  • Java基础day11笔记:多线程同步函数|synchroniz

    11-多线程(多线程-同步函数) 银行类: 储户类: 主函数中开两个线程: 运行结果: 但...

网友评论

    本文标题:线程传递的函数是类方法

    本文链接:https://www.haomeiwen.com/subject/nfqmvftx.html