当前位置: 技术问答>linux和unix
pthread_create编译错误
来源: 互联网 发布时间:2016-06-03
本文导语: 我在类的某一个方法里创建线程如下: int ret_val=pthread_create(&pt,NULL,prefun,x); if(ret_val!=0){ printf("Create pthread fail.n"); 其中,prefun是我在该类的.h文件中声明的一个函数 具体如下: public: void* prefun...
我在类的某一个方法里创建线程如下:
int ret_val=pthread_create(&pt,NULL,prefun,x);
if(ret_val!=0){
printf("Create pthread fail.n");
其中,prefun是我在该类的.h文件中声明的一个函数 具体如下:
public:
void* prefun (void* arg);
在.cpp文件中实现:
void * SSVector::prefun (void* arg){
。。。。
}
但是编译出错:
src/ssvector.cpp:856: error: argument of type ‘void* (soplex::SSVector::)(void*)’ does not match ‘void* (*)(void*)’
int ret_val=pthread_create(&pt,NULL,prefun,x);
if(ret_val!=0){
printf("Create pthread fail.n");
其中,prefun是我在该类的.h文件中声明的一个函数 具体如下:
public:
void* prefun (void* arg);
在.cpp文件中实现:
void * SSVector::prefun (void* arg){
。。。。
}
但是编译出错:
src/ssvector.cpp:856: error: argument of type ‘void* (soplex::SSVector::)(void*)’ does not match ‘void* (*)(void*)’
|
是下面这样
intret_val=pthread_create(&pt,NULL,(void(*)(void*))SSVector::prefun,NULL);
|
楼主注意了,thread_create中第3个参数的格式是 void *func(void *),楼主可以在thread_create()所在的代码中声明
一个非类成员函数prefun,在prefun函数中再调用* SSVector::prefun (void* arg)
例如如下的代码:
pthread_create( &tids[i], NULL, start, this);
start函数中又调用了一个类成员函数
void* start(void *arg)
{
( (CCrawl*)arg )->fetch(arg);
}