通过pthread传递struct到函数

时间:2011-11-16 03:09:25

标签: unix struct pthreads

如何通过pthread_create将结构传递给我的函数?我不断得到的错误是没有定义更低和更高,这会让我相信结构没有正确传递。我试过引用lower作为arg1.lower,我的错误就是说我试图请求非类型的成员void *

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 个答案:

答案 0 :(得分:1)

mergeSortThread()之前定义struct,并在mergeSortThread()中向 struct MergeSortThreadArg * 添加 arg1 的转换:

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

此外,分配结构及其字段(数组 tmp )更加正确/安全,以避免传递到位于另一个线程堆栈上的新线程数据。