1、使用 std::thread 并传入成员函数指针和对象指针
使用 std::thread
启动类的成员函数时,可以通过传入 成员函数指针 和 对象指针 来实现。这是最直接的方式之一。
#include<iostream> using namespace std; #include <thread> 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 <iostream> #include <thread> #include <functional> 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 <iostream> #include <thread> 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; }