0

给定以下代码:

void* actThread(int acc)
{
.
.
.
}
int err;
err = pthread_create(&ntid, NULL, actThread,  &connfd);

我如何将 connfd 整数传递给函数 actThread。我尝试的每一种方式都会出错

4

2 回答 2

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

于 2013-06-20T20:42:02.437 回答
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

于 2013-06-20T20:19:38.943 回答