Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Kthread:将结构传递给函数_C_Multithreading_Linux Kernel_Function Pointers - Fatal编程技术网

C Kthread:将结构传递给函数

C Kthread:将结构传递给函数,c,multithreading,linux-kernel,function-pointers,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->milli

我正在尝试实现一个需要使用线程的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);
}

将结构传递给此类函数指针的正确方法是什么?将数据指针强制转换为KillStruct*类型,然后取消引用以获取KillStruct对象

 killStruct obj = *(killStruct *)data;

您正在将整个结构强制转换为无效指针,这将不起作用。 必须让指针指向有效的结构,然后传递该指针,而不是整个结构

{
    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

,这是有效的,但由于某些奇怪的原因,obj结构的pid值在线程函数中不同。可能有什么问题?您正在传递的不是obj struct。