2011-11-16 5 views
0

構造体をpthread_createからmy関数に渡すにはどうすればよいですか?私が得続けるエラーは、構造体が適切に渡されなかったと信じられるように下位と上位が定義されていないことです。私は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のキャストを追加mergeSortThreadで構造体MergeSortThreadArg *それに():

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

はまた、構造体とそのフィールド(配列を割り当てるために安全な/より正確だおよびtmp)を使用して、別のスレッドのスタックにある新しいスレッドデータに移動しないようにします。

関連する問題