我有一个这样的结构:
struct data{
int x;
int y;
}
我有一个看起来像这样的线程函数:
void *threadFunction(void *item){
data *myData = (data*) item;
int first = 50;
int second = 10;
myData->x = first;
myData->y = second;
return(void*) myData;
}
我在 main() 中这样调用线程函数:
pthread_create(threadID, NULL, threadFunction, &item);
但是当我想使用以下方法将线程函数的值返回到 main() 时:
struct data* returnedItem;
pthread_join(threadID, (void**) returnedItem;
cout << returnedItem->x << returnedItem->y;
我不确定会发生什么,因为我的程序似乎什么都不做。它编译并运行,但它在某处无限循环或只是等待某事。我完全不确定会发生什么,我只是没有得到任何回应。我究竟做错了什么?我在 main() 中是否缺少从 pthread_join 语句中检索值的内容?也许我搞砸了声明中的论点?
最佳答案
你的指针变得困惑了。这样做:
void * p;
pthread_join(threadID, &p);
data * returnedItem = static_cast<data *>(p);
虽然可以将指针从空指针转换到空指针,但您不能假装 X
类型的变量(在您的例子中是 data *
) 实际上是 Y
类型的变量(在您的例子中是 void *
)。这是不允许的和未定义的行为。
关于c++ - 如何从线程函数返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993594/