c - pthread_create() 调用的函数有多个参数吗?

标签 c pthreads

我需要将多个参数传递给我想在单独线程上调用的函数。我有read执行此操作的典型方法是定义一个结构体,向函数传递一个指向该结构体的指针,并为参数取消引用它。但是,我无法让它工作:

#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

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

最佳答案

因为你说

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

而不是

struct arg_struct *args = 参数;

关于c - pthread_create() 调用的函数有多个参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30962190/

相关文章:

c++ - 在 C++ 中将 double 转换为 (IEEE 754) 64 位二进制字符串表示形式

c - 如何从 C 中的函数的每次调用返回不同的字符串?

C 指针转换

c - flag&0xffffffff 在这个例子中做了什么

c++ - 作为 C++ 类的成员启动线程的最佳方式?

c - 具有 C 套接字和 pthreads 的多线程 TCP 服务器 - 为什么accept() 在第二个请求上阻塞?

在 C 中使用 ## 运算符连接字符串

c++ - Opencv Segmentation Fault 使用 pthread 捕获帧 C++

c - 从线程内增加全局计数器变量,而无需等待每个单独的线程

php - 具有多线程持久化和刷新的 Doctrine Entity Manager