我使用的操作系统是ubuntu 12.04
报错的代码段如下:
pthread_t id;
int ret = pthread_create(&id,NULL,(void *)func,NULL);
然后报错内容是:invalid use of member(did you forget the '&'?)
这句话我知道啥意思,但是不知道哪里少了取地址符,求大神赐教
搞定了,是线程函数要使用静态类型
还有编译器是gcc4.4.7
void*msg_thread(void*ptr);
pthread_tpid;
pthread_create(&pid,NULL,msg_thread,null);
void*msg_thread(void*ptr){
while(1){
printf("ok");
}
}
直接把(void*)改成&试试,如果线程函数定义为函数指针,pthread_create里边参数应该直接就是函数指针的名字,如果是一般函数,怎要加&取地址
试试
pthread_create(&id,NULL,(void*)&func,NULL)
操作系统和编译器都和楼主不一样(Ubuntu16.04,gcc5.3.1),仅供参考,感觉楼主的代码在我机器上应该能正常编译。。下面两段代码在我机器上都是可以跑的。。
#include<pthread.h>#include<stdio.h>voidmy_method(void*whatever){printf("Called\n");}intmain(intargc,char**argv){pthread_tthread;pthread_create(&thread,NULL,(void*)&my_method,NULL);pthread_join(thread,NULL);return0;}
#include<pthread.h>#include<stdio.h>voidmy_method(void*whatever){printf("Called\n");}intmain(intargc,char**argv){pthread_tthread;pthread_create(&thread,NULL,(void*)my_method,NULL);pthread_join(thread,NULL);return0;}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。