无法在C中为函数创建pthread

时间:2016-05-12 07:24:36

标签: c pthreads

我是C的新手,我试图使用下面的代码创建线程,但我无法创建线程,任何人都可以告诉我哪里出错了... 它不会进入'如果'循环而不是调用' myfunction'

void *myfunction() {
   //my code
}

void createThreadForMyFunction(void) {
   pthread_t thread_ID;
   if(pthread_create(&thread_ID, NULL, myfunction, NULL)) {
         printf("pthread_create");
    }
}

3 个答案:

答案 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;
}