c - 线程: Passing struct to function

标签 c multithreading linux-kernel function-pointers

我正在尝试实现一个需要与线程一起使用的 kthread。

我尝试传递这样的结构,这会在编译时导致错误:

    int thread_function(void* data)
{
    killStruct obj = (killStruct) data;
    //msleep((unsigned int) time);
    printk(KERN_INFO"From the inner Thread: PID: %d, Time:%ld\n",obj->pid,obj->millisecondsToKill);
    //kill prozess by ID
    return 0;
}

static void prozess_kill(struct killStruct obj)
{
    task = kthread_run(&thread_function,(void*)obj ,obj->pid);
}

将结构传递给此类函数指针的正确方法是什么

最佳答案

您正在将整个结构转换为 void 指针,这是行不通的。 您必须有指向有效结构的指针,然后传递该指针,而不是整个结构。

{
    struct killStruct* o = initializethestruct(); //malloc, set members

    prozess_kill( o ) ;
}

static void prozess_kill(struct killStruct* obj)
{
    task = kthread_run(&thread_function,(void*)obj ,obj->pid);
}


int thread_function(void* data)
{
    struct killStruct* obj = (struct killStruct*) data;
   ....

您还以两种不同的方式使用结构名称,它应该始终是 struct KillStruct ,或者如果它是 typedef 则始终是 killStruct

关于c - 线程: Passing struct to function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21457012/

相关文章:

python - python线程中的信号中断

java - 多线程循环赛

linux - 我需要找到如何区分 usb 已连接和读卡器也已连接到 linux 中的目标

linux - 找到 XZ 流的结尾

linux-kernel - 以非root用户写入/dev/port

c - MPI初始化错误

c - 从多个寄存器收集特定元素并存储到一个寄存器

c - 为什么 gcc 在 cmd 行 (-D) 中重新定义 malloc() 时不检查函数的隐式声明?

c - Linux C,如何安排10个等待线程以FIFO方式执行?

java - 在给定机器上控制 Java 线程创建的最佳方法是什么?