给定以下代码:
void* actThread(int acc)
{
.
.
.
}
int err;
err = pthread_create(&ntid, NULL, actThread, &connfd);
我如何将 connfd 整数传递给函数 actThread。我尝试的每一种方式都会出错
给定以下代码:
void* actThread(int acc)
{
.
.
.
}
int err;
err = pthread_create(&ntid, NULL, actThread, &connfd);
我如何将 connfd 整数传递给函数 actThread。我尝试的每一种方式都会出错
通常由 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
您可以执行以下操作:
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