C++使用pthread_create()函式的正確開啟方式
阿新 • • 發佈:2019-02-13
【問題】
起步學習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);