pthread_create 传入类的方法
时间: 2023-09-20 17:04:29 浏览: 83
您可以使用`pthread_create`函数来启动一个新的线程,并将一个类的成员函数作为线程函数。下面是一个示例:
```cpp
#include <pthread.h>
// 定义一个类
class MyClass {
public:
void myMethod() {
// 线程执行的代码
// ...
}
};
// 线程函数的包装器,用于调用类的成员函数
void* threadWrapper(void* obj) {
MyClass* myObj = static_cast<MyClass*>(obj);
myObj->myMethod();
return nullptr;
}
int main() {
// 创建一个MyClass对象
MyClass myObj;
// 创建线程并传入成员函数
pthread_t thread;
pthread_create(&thread, nullptr, &threadWrapper, &myObj);
// 等待线程结束
pthread_join(thread, nullptr);
return 0;
}
```
在上面的示例中,我们首先定义了一个名为`MyClass`的类,并在其中声明了一个名为`myMethod`的成员函数。然后,我们定义了一个名为`threadWrapper`的线程函数包装器,用于在其中调用`MyClass`类的成员函数。在`main`函数中,我们创建了一个`MyClass`对象`myObj`,然后使用`pthread_create`函数创建了一个新的线程,并将`threadWrapper`作为线程函数传入。最后,我们使用`pthread_join`函数等待线程结束。
请注意,当将类的成员函数作为线程函数传递给`pthread_create`时,需要使用一个静态的线程函数作为包装器。包装器函数将类的实例作为参数传递给成员函数,并在其中调用相应的成员函数。
阅读全文