1

我可以将两个结构作为参数传递给 C 程序中的 pthread。我需要做这样的事情:

void *funtion1(void *pass_arg, void *pass_arg1)
{
    struct thread_arg *con = pass_arg;
    struct thread_arg1 *con = pass_arg1;
    //necessary code
}
int main()
{
pthread_t threaad;
//necessary code
while(1)
{
    th1 = pthread_create(&threaad, NULL, function1, (void *)&pass_arg, (void*)&pass_arg);
//necessary codes
}
pthread_exit(NULL);
return 1;
}

我的意思是有什么方法可以在使用 pthread 时将两个结构传递给同一个函数?操作平台:Linux。

4

3 回答 3

4

不是直接的,因为 libpthread 中的函数只接受一个用户数据参数。但这应该足够了,不是吗?

struct user_struct {
    void *p1, *p2;
} arg = { &arg1, &arg2 };

pthread_create(&tid, NULL, threadfunc, &arg);

另外,不要将指针指向void *,这是多余的、危险的并且会降低可读性。

于 2013-04-07T12:01:02.603 回答
1

定义一个新的结构类型,其中包含两个原始类型作为成员。称它为有意义的东西,例如thread_args.

于 2013-04-07T11:59:04.990 回答
0

我通过将两个结构嵌套到一个结构中来解决这个问题,如下所示:

struct s1
{
    //variables
};

struct s2
{
    //variables
}

struct s3
{
    struct s1 ss1;
    struct s2 ss2;
}
void *funtion1(void *pass_arg)
{
    struct s3 *con = pass_arg;
    //necessary code
}
int main()
{
    //code
    th1 = pthread_create(&thread, NULL, function1, (void *)&pass_arg);
}
于 2013-04-07T12:31:59.200 回答