1. 程式人生 > >C++使用pthread_create()函式的正確開啟方式

C++使用pthread_create()函式的正確開啟方式

【問題】

        起步學習Linux下的多執行緒程式設計,按照網上的教程著手寫第一個多執行緒程式設計檔案,結果在編譯時就遇到了第一個關於pthread_create()的錯誤。

           pthread_create()呼叫格式如下:

        ret = pthread_create(&id,NULL,(void *) thread,NULL);
            thread函式定義為:
        void thread(void)
      {
          int i;
            for(i=0;i<3;i++)
              printf("This is a pthread.\n");
        }

               編譯錯誤資訊:

        error:invalid conversion from 'void*' to 'void* (*)(void*)'

【解決思路】

               此連結檢視pthread中對於pthread_create()函式的宣告,可以看到對於pthread_create()函式的第三個引數定義形式為

        void *(*start_routine) (void *)

                表示這是一個指向函式的指標,該函式的引數是void *,函式的返回值是void *。

【解決方案】

                thread函式定義修改為:

        void* thread(void *)
      {
          int i;
            for(i=0;i<3;i++)
              printf("This is a pthread.\n");
        }

             pthread_create()呼叫格式修改如下:

         ret = pthread_create(&id,NULL,&thread,NULL);