c++ - 如何从线程函数返回值?

标签 c++ multithreading pointers pthreads

我有一个这样的结构:

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/

相关文章:

python - 如何在线程池执行的函数中仅发送一次电子邮件?

c - 为什么下面的代码会产生段错误

C++ 标准容器 - 没有指针的多态性。是否可以?

c - NULL 指针的特定值

c++ - 构建一个不依赖 dll 的 C++ 二进制文件

c++ - STL 中的比较器

c++ - 自定义 Unique_ptr 删除器,控制删除

c++ - 变体:没有用于调用 'get' 的匹配函数

java - Jprogressbar 不工作

使用 pthread 计算文本文件中字符数的 C 多线程程序