gpt4 book ai didi

c - 由于 void 指针和整数转换错误,pthread_create 无法工作

转载 作者:行者123 更新时间:2023-11-30 15:49:51 27 4
gpt4 key购买 nike

如何/为何与 void 指针或 int 进行转换?

以下代码错误地生成编译器错误:

while(num_producers > 0) {
pthread_t tid; // id of pthread (not used except to call pthread_create)
pthread_attr_t attr; // pthread attributes (not used except to call pthread_create)
pthread_attr_init(&attr); // default pthread attributes
pthread_create(&tid, &attr, producer, num_producers);
num_producers--;
}

出现以下错误(全部在 pthread_create 行上):

error: invalid conversion from 'void (*)(int)' to 'void* (*)(void*)'
error: initializing argument 3 of 'int pthread_create(_opaque_pthread)t**, const pthread_attr_t*, void* (*)(void*), void*)'
error: invalid conversion from 'int' to 'void*'
error: initializing argument 4 of 'int pthread_create(_opaque_pthread_t**, const pthread_attr_t*, void* (*)(void*), void*)'

我想创建一个 pthread,它(仅)运行函数“生产者”,该函数也包含在与 main 相同的文件中。为什么这不起作用?

最佳答案

以正确的方式声明生产者:

void * producer(void * p)
{
intptr_t n = (intptr_t)(p);

// ... use "n"

}

然后:

int n = 42;

int res = pthread_create(&tid, &attr, producer, (void*)(n));

关于c - 由于 void 指针和整数转换错误,pthread_create 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070207/

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