首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在kthread_run中使用函数指针?

如何在kthread_run中使用函数指针?
EN

Stack Overflow用户
提问于 2019-06-26 23:37:44
回答 1查看 413关注 0票数 2

我正在用Linux编写一个系统调用,为此,我想使用kthread_run创建几个线程。然而,当我传递函数指针时,我得到:

代码语言:javascript
运行
复制
error: passing argument 1 of ‘kthread_create_on_node’ from incompatible pointer type

相关代码如下:

代码语言:javascript
运行
复制
//method to do nothing for 100 milliseconds
int exist()
{
   mdelay(100);
   return 0;
}

//function pointer to exist
int (*exist_ptr)(void) = ∃

//create processes and delta queues 
for (i = PROC_NUM - 1; i >= 0; i--)
{
    char name[6] = {'d', 'e', 'l', 't', 'a', i2};

    delta_entry de = {
        .task = kthread_run(exist_ptr, NULL, name);
        .list = linked_list;
        .delta_time =  PROC_NUM * MILSEC_GAP;
        .position = i2;
    }
    enqueue(&linked_list, &de, i2 - 1);
    i2++;
}

这显然不是所有的代码,因为我不想让这篇文章太长。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-26 23:45:48

从linux源代码看,kthread_run是一个名为kthread_create_on_node的宏,它需要int (*threadfn)(void *data)

int exist()接受未指定数量的参数,因此与该函数签名兼容,但int (*exists_ptr)(void)不接受任何参数。(仅在C++中,int exist()int exist(void)是同义词。在C中,()表示未指定的提升参数,而(void)表示没有参数。)

在现代C中,通常不鼓励非原型化函数定义。您应该从一开始就让exist函数的签名int exists(void *unused)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56776473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档