簡體   English   中英

Kthread:將結構傳遞給函數

[英]Kthread: Passing struct to function

我正在嘗試實現需要與線程一起使用的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名稱,它應該始終為struct killStruct如果它是typedef,則始終為killStruct

將數據指針強制轉換為KillStruct *類型,然后取消引用以獲得Killstruct對象。

 killStruct obj = *(killStruct *)data;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM