分享

使用工作队列

 omcc 2011-01-21
•驱动为需要延迟处理的工作建立一work_struct 结构, 该结构即为工作单元, 它还包含一函数指针用来处理具体的延迟工作;
•该工作单元被添加到当前CPU 的默认工作线程或自定义工作线程的工作队列中等待处理
• 在某一时刻, 工作线程被唤醒, 它将循环处理工作队列中的每一个工作单元。
使用系统中的默认工作队列
 
•首先, 要为需要延迟处理的工作单元建立一个work_struct 结构
–内核提供了下面2 个宏来方便地建立该结构:
•DECLARE_WORK(name, void (*func)(void *), void *data);  //静态创建
•INIT_WORK (struct work_struct *work, void (*func)(void *),void *data)   //动态初始化
•将该结构放入到默认工作线程的工作队列中去, 内核提供以下2 个宏操作:
–schedule_work(work);
–schedule_delayed_work(work, delay)。
–这2 个宏操作的主要区别就在于一个是立即被调度, 一个是延迟delay 个时钟周期后被调度。
使用自定义工作队列
 
•创建工作线程使用
           struct workqueue_struct *create_workqueue (const char *name)。
–其中, name 为该类型工作工作线程的名字
•创建类型为myworker的工作线程的代码如下:
    struct workqueue_struct *myworker;
     myworker = create_workqueue( “myworker”)。
•将work_struct 加入到自定义工作线程的工作队列中可以采用以下接口:
–int queue_work(struct workqueue_struct *wq, struct work_struct *work);
–int queue_delayed_work (struct workqueue_struct *wq,struct work_struct *work,unsigned long delay)。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/unbutun/archive/2009/11/07/4783215.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多