给出以下代码:
void* actThread(int acc)
{
.
.
.
}
int err;
err = pthread_create(&ntid, NULL, actThread, &connfd);
如何将connfd整数传递给actThread函数。每次尝试我都会遇到错误
答案 0 :(得分:2)
您可以执行以下操作:
void* actThread(void* accp)
{
int acc = (int)accp;
.
.
.
}
int connfd;
int err;
err = pthread_create(&ntid, NULL, actThread, (void*)connfd);
但是,正如我假设您不知道自己在做什么,在应用之前尝试学习指针。
我可以建议你开始这个问题:https://stackoverflow.com/questions/4016765/tutorial-on-c-pointers
答案 1 :(得分:2)
通常由phtread_create创建的线程具有类型void* function (void*)
。 void指针可以指向任何类型的实例,因此也可以指向整数。以下一个示例为例,它显示了如何异步递增整数。
void* increment (void * pointer_to_int)
{
int* number = (int*) pointer_to_int;
(*number)++;
return number;
}
然后你可以像这样调用这个帖子:
pthread_t t;
int *no_answer = malloc(sizeof(int));
//check if you get an int
*no_answer = 41;
pthread_create(&t, NULL, increment, (void*)no_answer);
pthread_join(t, NULL);
printf("The answer is %d\n", *no_answer);
free(no_answer);
首先分配一个int并将其置于某个值,然后在线程中将其递增。你甚至可以用pthread_join获得返回值,但是在这段代码中它会有点多余。
编辑代码输出The answer is 42