2011-11-16 102 views
0

如何通過pthread_create將結構傳遞給我的函數?我一直得到的錯誤是低和高尚未定義,這將導致我相信結構沒有正確傳遞。我曾嘗試引用作爲arg1.lower低,我回錯誤是說我嘗試請求對非類類型爲void *的成員通過pthread將結構傳遞給函數

void * mergeSortThread(void *arg1){ 
std::ostringstream ostr; 
ostr << "begin: " << lower << " " << upper << endl; 
string message = ostr.str(); 
write(2, message.data(), message.length()); 

} 



int main(int argc, char** argv) 
{ 

struct MergeSortThreadArg 
{ 
int * array; 
int * temp; 
int lower, upper; 

}; 

pthread_attr_t attr; 
pthread_attr_init(&attr); 
int arr[20]; 
int temp[20]; 

MergeSortThreadArg arg; 
arg.array = arr; 
arg.temp = temp; 
arg.lower = 0; 
arg.upper = 19; 

pthread_create(th, &attr, mergeSortThread, &arg); 
pthread_join(th[z], NULL); 
return 0; 
} 

回答

1

之前mergeSortThread()定義結構,並添加ARG1的鑄造結構MergeSortThreadArg *它在mergeSortThread():

void * mergeSortThread(void *arg1){ 
    struct MergeSortThreadArg *p_MST = (struct MergeSortThreadArg *)arg1; 
    std::ostringstream ostr; 
    ostr << "begin: " << p_MST->lower << " " << p_MST->upper << endl; 
    ... 

而且,它更正確/安全分配結構體及其字段(陣列tmp)以避免傳遞到位於另一個線程堆棧上的新線程數據。