如何将整数赋值给pthread_create调用的函数?

时间:2013-06-20 20:17:30

标签: c multithreading ubuntu

给出以下代码:

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

如何将connfd整数传递给actThread函数。每次尝试我都会遇到错误

2 个答案:

答案 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