我是C的新手,我试图使用下面的代码创建线程,但我无法创建线程,任何人都可以告诉我哪里出错了... 它不会进入'如果'循环而不是调用' myfunction'
void *myfunction() {
//my code
}
void createThreadForMyFunction(void) {
pthread_t thread_ID;
if(pthread_create(&thread_ID, NULL, myfunction, NULL)) {
printf("pthread_create");
}
}
答案 0 :(得分:2)
pthread_create
成功返回0
。因此,您可以将!
添加到if
语句中,或执行以下操作:
if (pthread_create...) {
perror("CREATE");
return;
}
/* other code */
要创建标识为main
的{{1}}函数等待子项,您可以在创建线程后执行threadID
而不使用pthread_join(threadID, NULL);
和朋友。
Read
答案 1 :(得分:1)
pthread_create的返回值是int
,成功时为0。因此,如果您没有输入if
函数,那是因为您的线程已成功创建。
所以你的函数myFunction
实际上是在新线程中调用的。
请注意,如果您的主线程(执行createThreadForMyFunction
的主线程)结束得太快,它会在打印任何内容之前杀死子线程(执行myFunction
的线程),您将看不到您的线程已成功创建。尝试在创建线程后添加usleep,以便为新线程提供一些时间来显示自己。
答案 2 :(得分:0)
试一试:
void* myfunction(void *arg)
{
// do somthing
}
int main(void)
{
pthread_t thread_ID;
int err;
err = pthread_create(&thread_ID, NULL, &myfunction, NULL);
if (err != 0)
printf("\ncan't create thread :[%s]", strerror(err));
else
printf("\n Thread created successfully\n");
}
sleep(5);
return 0;
}