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