转自https://blog.youkuaiyun.com/CJ_star/article/details/54379435
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*)强制转换,错误消除。
我的理解是在用g++编译时,是同时检测函数和参数,如果定义回调时强转其参数,则编译器会报错
例:
- 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);
- }
- 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);
- }