2016-12-10 105 views
0

我在創建線程池時遇到問題。我不斷得到警告:創建線程時出錯。警告:從不兼容的指針類型中傳遞'pthread_create'的參數3

warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type 

我已經搜索了問題,但他們都沒有解決我的問題。 這裏是我使用的代碼來創建線程

for(j=2;j<THREADNUMBER+2;j++){ 
    id[j] = j; 
    if(pthread_create(&thread_array[j],NULL,requestHandler,(void*)id[j])!=0){ 
     perror("Error creating thread "); 
    } 
} 
+0

請顯示'requestHandler()'的函數簽名。 – e0k

+0

我認爲這是重要的部分 void * requestHandler(void * n) –

+0

嗯..也許解析器損壞了你的註釋。請圍繞代碼段使用反引號。是簽名'void requestHandler(void n)'或'void * requestHandler(void * n)'? – e0k

回答

0

man pages

#include <pthread.h> 

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
         void *(*start_routine) (void *), void *arg); 

編譯和鏈接與-pthread。

第三個參數是一個指向一個返回void *並採取void *類型的一個參數的功能。通過僅使用void *類型的通用指針值(即存儲器地址)作爲參數和返回類型,它是可以(至少間接地)接受任何作爲參數並返回任何結果的地址的函數。這使它成爲一個相當普遍的功能,但仍具有固定的功能簽名。

您的功能requestHandler()似乎不符合此簽名。確保您的requestHandler()只接受一個類型爲void *的參數並返回void *。它應該看起來像這樣:

void *requestHandler(void *arg) { 
    ... 
} 
+0

這是我以前的工作,它不工作,但現在它... –

相關問題