为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
潇潇雨雨 2019-12-20 10:50:26
我需要将多个参数传递给要在单独线程上调用的函数。我已经读到,执行此操作的典型方法是定义一个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 */}输出应为:57但是当我运行它时,我实际上得到了:141921115-1947974263有人知道我在做什么错吗?
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

因为你说


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


代替


struct arg_struct *args = arguments;


查看完整回答
反对 回复 2019-12-20
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

使用


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

代替


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


查看完整回答
反对 回复 2019-12-20
?
呼唤远方

TA贡献1856条经验 获得超11个赞

main()有自己的线程和堆栈变量。为堆中的“ args”分配内存或使其成为全局内存:


struct arg_struct {

    int arg1;

    int arg2;

}args;


//declares args as global out of main()

然后,当然,改变从引用args->arg1到args.arg1等。


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 610 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信