2012-10-20 88 views
0

所以我有一個結構如下:傳遞結構數組到在pthread_create

struct threadData{ 
    string filename 
    int one; 
    int two; 
}; 

,我創建了這些結構的一個這樣的數組:

pthread_t threadID[5]; 
struct threadData *threadP; 
threadP = new struct threadData[5]; 

然後我通過這一個線程函數結構數組如下:

for(int i = 0; i < 5; i++){ 
    pthread_create(&threadID[i], NULL, threadFunction, (void *) threadP[i]); 
} 

這就是我的threadFunction寫法:

void *threadFunction(void * threadP[]){ 

} 

我已經嘗試過各種東西,但我總能得到什麼我傳遞是不正確的,我應該怎麼做這個正確的,這樣我可以在每個結構對象我通過訪問和處理的變量中的錯誤在?我有一種感覺,我的語法在某處是錯誤的,因爲我使用了一系列的結構體......我只是不知道錯在哪裏或是什麼。任何幫助,將不勝感激!

+1

它應該是'&threadP [i]'。就這樣。 – 2012-10-20 01:10:14

+1

爲什麼不使用std :: thread? –

+0

或'boost :: thread'? – Recker

回答

1
void *threadFunction(void * threadP[]){ 

函數不能在C++數組類型的參數,而不是參數必須是一個指針,並用作函數參數衰減的指針的第一個元素的陣列,以便聲明等效於:

void *threadFunction(void ** threadP){ 

其中明確不正確的類型傳遞給pthread_create

你需要傳遞函數與此簽名:

void *threadFunction(void * threadP) 
+0

它看起來像你這裏的大部分抱怨都是文體。你暗示真正的問題,但不要多解釋它。說你不能將數組傳遞給C++中的函數也有點誤導。你可以,但正如你指出的那樣,它們會「衰減」到一個指針。但是,在某些情況下,數組語法實際上是必需的 - 例如傳遞多維數組時。 –

+0

例如:http://www.eskimo.com/~scs/cclass/int/sx9a.html ...無論如何,多維數組與這種情況無關。不過,我只想指出你的陳述有點誤導。 –

+0

它需要解釋多少?該函數是錯誤的類型,這就是爲什麼它不能編譯。而當你有一個多維數組時,你仍然沒有數組類型的參數,你有一個指向array_的指針。無論如何,我已經刪除了文體評論並改寫了答案 –