2014-01-30 88 views
0

我想實現需要與線程一起工作的kthread。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); 
} 

什麼是一個結構傳遞給這樣的函數指針

回答

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

+0

這可以工作,但是當出於某種奇怪的原因,obj結構的pid值在線程函數內部是不同的。什麼可能是錯的? – arnoapp

+0

您正在傳遞的不是obj結構。 – this

0

鑄數據指針的正確方法KillStruct *類型,然後取消引用以獲取Killstruct對象。

killStruct obj = *(killStruct *)data;