Kthread:将struct传递给函数

时间:2014-01-30 12:48:54

标签: 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);
}

将结构传递给这样的函数指针

的正确方法是什么

2 个答案:

答案 0 :(得分:1)

您正在将整个结构转换为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

答案 1 :(得分:0)

将数据指针转换为KillStruct *类型,然后取消引用以获取Killstruct对象。

 killStruct obj = *(killStruct *)data;