pthread_create为什么只能调用静态成员
时间: 2023-08-28 22:05:51 浏览: 120
undefined reference to ‘pthread_create’的解决方法
5星 · 资源好评率100%
pthread_create函数是用于创建一个新的线程的函数,它的原型如下:
```c
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
```
其中,第三个参数start_routine是一个指向函数的指针,它用于指定新线程的入口函数。这个函数必须具有特定的签名,即返回类型为void*,参数类型为void*。
由于C语言的限制,普通的成员函数(非静态成员函数)会隐含一个额外的this指针作为参数,这样就与pthread_create要求的函数签名不一致了。因此,pthread_create只能调用静态成员函数,因为静态成员函数不需要隐含的this指针。
如果想在创建线程时调用非静态成员函数,可以使用一些技巧,例如将非静态成员函数包装成静态成员函数,然后在静态成员函数中通过参数传递this指针。或者使用全局变量来作为线程的入口函数,在入口函数中再调用非静态成员函数。
阅读全文