【问题标题】:Unable to create pthread for function in C无法为 C 中的函数创建 pthread
【发布时间】:2016-05-12 07:24:35
【问题描述】:

我是 C 新手,正在尝试使用下面的代码创建线程,但我无法创建线程,谁能告诉我哪里出错了... 它不会进入“if”循环,也不会调用“myfunction”

void *myfunction() {
   //my code
}

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

【问题讨论】:

  • @red0ct 但是为什么函数没有被调用.....我需要在线程创建后显式调用函数吗..
  • 我们无法从您的问题中推断出更多其他信息。请阅读帮助页面,了解如何为问题创建一个最小的完整示例并提出一个新问题。

标签: c pthreads


【解决方案1】:

pthread_create 成功返回0。因此,您可以将 ! 添加到您的 if 语句或执行以下操作:

if (pthread_create...) {
    perror("CREATE");
    return;
} 
/* other code */

要让main 函数等待ID 为threadID 的子函数,您也可以在创建线程后执行pthread_join(threadID, NULL);,而不使用sleep 和朋友。
Read

【讨论】:

    【解决方案2】:

    pthread_create 的返回值是 int,成功时为 0。所以如果你没有进入你的if函数,那是因为你的线程创建成功了。

    所以你的函数myFunction实际上在你的新线程中被调用了。

    请注意,如果您的主线程(执行createThreadForMyFunction)结束得太快,它会在打印任何内容之前杀死子线程(执行myFunction),您将看不到您的线程是否成功创建的。尝试在创建线程后添加usleep,以便给新线程一些时间来展示自己。

    【讨论】:

      【解决方案3】:

      试试看:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        相关资源
        最近更新 更多