CPP

线程传递的函数是类方法

2018-08-10  本文已影响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);
}
上一篇 下一篇

猜你喜欢

热点阅读