如何用createthread启动一个类的成员函数
时间: 2023-09-12 13:10:02 浏览: 165
创建线程时,传递给线程的函数必须是静态函数或全局函数。如果想要在线程中执行类的成员函数,可以采用以下两种方法:
1. 将类的对象作为参数传递给静态函数,然后在静态函数中调用类的成员函数。
例如:
```c++
class MyClass {
public:
void myMemberFunction() {
// do something
}
};
void* myThreadFunction(void* arg) {
MyClass* myClass = static_cast<MyClass*>(arg);
myClass->myMemberFunction();
return NULL;
}
int main() {
MyClass myClass;
pthread_t thread;
pthread_create(&thread, NULL, myThreadFunction, &myClass);
pthread_join(thread, NULL);
return 0;
}
```
在这个例子中,`myThreadFunction`是一个静态函数,它接受一个`MyClass`类型的指针作为参数,并在函数中调用`myClass`对象的成员函数`myMemberFunction`。
2. 将类的对象指针作为参数传递给`pthread_create`函数,并使用`reinterpret_cast`将其转换为`void*`类型。然后,在线程函数中将其转换回类的对象指针,并调用成员函数。
例如:
```c++
class MyClass {
public:
void myMemberFunction() {
// do something
}
};
void* myThreadFunction(void* arg) {
MyClass* myClass = reinterpret_cast<MyClass*>(arg);
myClass->myMemberFunction();
return NULL;
}
int main() {
MyClass myClass;
pthread_t thread;
pthread_create(&thread, NULL, myThreadFunction, reinterpret_cast<void*>(&myClass));
pthread_join(thread, NULL);
return 0;
}
```
在这个例子中,`myThreadFunction`函数接受一个`void*`类型的指针作为参数,并使用`reinterpret_cast`将其转换为`MyClass`类型的指针。然后,在函数中调用`myClass`对象的成员函数`myMemberFunction`。
阅读全文