由pthread_create()调用的函数有多个参数?

我需要将多个参数传递给要在单独线程上调用的函数。我已经读到,执行此操作的典型方法是定义一个struct,向该函数传递一个指向该struct的指针,然后将其取消引用以用作参数。但是,我无法使它正常工作:


#include <stdio.h>

#include <pthread.h>


struct arg_struct {

    int arg1;

    int arg2;

};


void *print_the_arguments(void *arguments)

{

    struct arg_struct *args = (struct arg_struct *)args;

    printf("%d\n", args -> arg1);

    printf("%d\n", args -> arg2);

    pthread_exit(NULL);

    return NULL;

}


int main()

{

    pthread_t some_thread;

    struct arg_struct args;

    args.arg1 = 5;

    args.arg2 = 7;


    if (pthread_create(&some_thread, NULL, &print_the_arguments, (void *)&args) != 0) {

        printf("Uh-oh!\n");

        return -1;

    }


    return pthread_join(some_thread, NULL); /* Wait until thread is finished */

}

输出应为:


5

7

但是当我运行它时,我实际上得到了:


141921115

-1947974263

有人知道我在做什么错吗?


潇潇雨雨
浏览 611回答 3
3回答

神不在的星期二

因为你说struct arg_struct *args = (struct arg_struct *)args;代替struct arg_struct *args = arguments;

米琪卡哇伊

使用struct arg_struct *args = (struct arg_struct *)arguments;代替struct arg_struct *args = (struct arg_struct *)args;

呼唤远方

main()有自己的线程和堆栈变量。为堆中的“ args”分配内存或使其成为全局内存:struct arg_struct {&nbsp; &nbsp; int arg1;&nbsp; &nbsp; int arg2;}args;//declares args as global out of main()然后,当然,改变从引用args->arg1到args.arg1等。
打开App,查看更多内容
随时随地看视频慕课网APP