gpt4 book ai didi

使用 pthread_exit() 返回 retval 时编译警告

转载 作者:太空狗 更新时间:2023-10-29 11:09:53 27 4
gpt4 key购买 nike

我有以下内容:

void *Thrd(void *data)
{
int ret;
ret = myfunc();
pthread_exit((void *)ret);
}

int main(int argc, char *argv[])
{
int status;

pthread_create(&Thread, NULL, Thrd, &data);

pthread_join(txThread, (void **)&status);
if (status)
printf("*** thread failed with error %d\n", status);
}

它有效,我能够读取状态,但我在编译时收到以下警告:

test.cpp: In function ‘void* Thrd(void*)’:
test.cpp:468:26: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

这是 pthread_exit() 的行

我根本找不到问题所在:( ...

最佳答案

因此,您正试图从线程函数返回一个整数值。 POSIX 线程函数只能返回 void*

有几种方法可以从另一个线程返回一个值:

1) 您可以将整数转换为 void* 并返回,前提是 void* 足够宽以保持值而不被截断:

void *Thrd(void *vdata) {
int value = ...;
void* thread_return_value = (void*)value;
return thread_return_value;
}
// ...
void* status;
pthread_join(txThread, &status);
int value = (int)status;

2) 将返回值的地址传递给线程函数,并让线程函数设置该值:

struct Data { int return_value; };

void *Thrd(void *vdata) {
// ...
int value = ...;
struct Data* data = vdata;
data->return_value = value;
return NULL;
}
// ...
pthread_create(&Thread, NULL, Thrd, &data);
pthread_join(txThread, NULL);
int value = data->return_value;

3) 让线程分配返回值。 joins() 的另一个线程需要读取该值并释放它:

void *Thrd(void *vdata) {
// ...
int* value = malloc(sizeof *value);
*value = ...;
return value;
}
// ...
void* status;
pthread_join(txThread, &status);
int* value = status;
// ...
free(value);

关于使用 pthread_exit() 返回 retval 时编译警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13949463/

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