1

C プログラムで 2 つの構造体をパラメーターとして 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 を使用しているときに、2 つの構造体を同じ関数に渡す方法はありますか? オペレーティング プラットフォーム: Linux。

4

3 に答える 3

4

libpthread の関数はユーザー データ引数を 1 つしか受け付けないため、直接ではありません。でも、それで十分ですよね?

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

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

また、ポインタを にキャストしないでください。これはvoid *余分で危険であり、可読性が低下します。

于 2013-04-07T12:01:02.603 に答える
1

元の 2 つの型をメンバーとして含む新しい構造体型を定義します。のような意味のあるものと呼んでくださいthread_args

于 2013-04-07T11:59:04.990 に答える
0

次のように、2 つの構造を 1 つの構造にネストすることで問題を解決しました。

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 に答える