【问题标题】:Pass struct to function through pthread通过 pthread 将结构传递给函数
【发布时间】:2011-11-16 03:09:24
【问题描述】:

如何通过 pthread_create 将结构传递给我的函数?我不断收到的错误是未定义 lower 和 upper ,这使我相信该结构未正确传递。我尝试将 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;
}

【问题讨论】:

    标签: unix struct pthreads


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 2015-10-26
      • 2012-05-09
      相关资源
      最近更新 更多