C++ 使用类的成员函数启动线程的几种方法

6703 Views

1、使用 std::thread 并传入成员函数指针和对象指针使用 std::thread 启动类的成员函数时,可以通过传入 成员函数指针 和 对象指针 来实现。这是最直接的方式之一。

#include

using namespace std;

#include

class MyClass {

public:

void memberFunction(int value) {

std::cout << "成员函数中传入的值是: " << value << std::endl;

}

};

int main() {

MyClass obj;

std::thread t(&MyClass::memberFunction, &obj, 42); // 注意 &obj

t.join();

return 0;

}

2、使用 std::bind 绑定成员函数和对象C++ 中,使用 std::bind 可以将类的成员函数与对象绑定在一起,从而方便地传入 std::thread。这是一种灵活且可读性较好的方法。std::bind 会预先将对象和参数绑定好,使其行为像普通函数。

#include

#include

#include

using namespace std;

class MyClass {

public:

void memberFunction(int value) {

std::cout << "使用 std::bind: " << value << std::endl;

}

};

int main() {

MyClass obj;

auto boundFunc = std::bind(&MyClass::memberFunction, &obj, 100);

std::thread t(boundFunc);

t.join();

return 0;

}

3、使用 lambda 表达式封装调用 C++ 中,使用 lambda 表达式 来封装成员函数的调用是一种现代、简洁且非常推荐的方式,尤其适用于启动线程时传入类的成员函数。

#include

#include

using namespace std;

class MyClass {

public:

void memberFunction(int value) {

std::cout << "使用 lambda 启动线程:" << value << std::endl;

}

};

int main() {

MyClass obj;

std::thread t([&obj]() {

obj.memberFunction(77);

});

t.join();

return 0;

}

火辣辣造句火辣辣造句、火辣辣的句子
星辰奇缘开服等级规则全解读