gpt4 book ai didi

c - 如何从线程返回结构?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:43 24 4
gpt4 key购买 nike

我正在尝试学习如何从线程返回一些值,但没有成功。我在我的代码中考虑过我无法返回全局变量,所以我从 malloc 获取内存,但我显然在 pthread_join 中遇到了问题。

#include<stdio.h>
#include<stdlib.h>
#include <pthread.h>

struct DIRECCION{
char street [20];
int number;
} ;



struct DIRECCION * pd = NULL;

void* show(void* dm){

struct DIRECCION * di = (void*)dm;
pd=(struct DIRECCION*)malloc(sizeof(struct DIRECCION));
printf("\nHilo show\n");
printf("Calle: %s\t",di->street);
printf("Altura: %d\n",di->number);

printf("Calle: ");
scanf("%s",pd->street);
printf("Altura: ");
scanf("%d",&(pd->number));
printf("me jui\n");


return((void*)pd);
}



int main (void){

pthread_t s_id;
struct DIRECCION dm;
struct DIRECCION d ;


printf("\nProceso\n");
printf("Calle: ");
scanf("%s",dm.street);
printf("Altura: ");
scanf("%d",&(dm.number));


pthread_create( &s_id , NULL, (void*)&show, (void*)&dm);
pthread_join( s_id , (void*)&d );

printf("Calle: %s\t",(d.street));
printf("Altura: %d\n",(d.number));
free(pd);
return 0;
}

最佳答案

第一步 -- 摆脱所有类型转换。您不需要它们,并且它们会隐藏您可能会从编译器那里得到的错误,这些错误会准确地告诉您您做错了什么。

当您这样做时,您会立即发现问题出在您对 pthread_join 的调用上——您正试图在需要时使用 struct DIRECCION * 调用它一个 void **。要修复它,您需要传递一个 void **,这意味着您需要一个 void * 来获取以下地址:

void *tmp;
struct DIRECCION *d;
pthread_join( s_id , &tmp );
d = tmp;
... do stuff with d->whatever

关于c - 如何从线程返回结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55670512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com