pthread_create的使用
int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)
要使g++编译通过,方法如下:
C++禁止将void指针随意赋值给其他指针。
因此你在把void thread(void)函数的入口转换为void*,然后当作参数调用pthread_create时就出现错误,因为pthread_create的参数里应该是指向形如void* fun(void*)函数的一个指针。
可以修改void thread(void)为void* thread(void*),然后去掉调用时的(void*)强制转换,错误消除。
例:
void* thread( void* ){
int i;
for( int i=0; i<3; i++ ){
cout << " This is a thread " << endl;
}
}
int main( int arg, char** argv ){
pthread_t id;
int i, ret;
ret = pthread_create( &id, NULL, thread, NULL);
if( ret != 0 ) {
cout << " Create thread error!" << endl;
exit(1);
}
cout << "This is the main process" << endl;
pthread_join( id, NULL );
return(0);
}
换成gcc
void thread( void ){
int i;
for( int i=0; i<3; i++ ){
cout << " This is a thread " << endl;
}
}
int main( int arg, char** argv ){
pthread_t id;
int i, ret;
ret = pthread_create( &id, NULL, (void *) thread, NULL);
if( ret != 0 ) {
cout << " Create thread error!" << endl;
exit(1);
}
cout << "This is the main process" << endl;
pthread_join( id, NULL );
return(0);
}