首先了解workqueue:
linux的工作队列(workqueue)是另外一种将工作推后执行的形式,它和软中断、tasklet 这两种下半部机制都有不同。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的就是工作队列允许被重新调度甚至是睡眠。
我们地任务就是创建一个工作者线程来处理我们的工作。我们的工作就是在 5 秒钟之后打印一个"I'm running"的信息。
备注://workqueue_struct是双向循环链表。里面的单元是work_struct
//工作队列子系统是一个用于创建内核线程的接口,通过它创建的内核线程被称作工作者线程(worker thread)。
以下是代码:
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/workqueue.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("LOVELYC");
MODULE_DESCRIPTION("This is a test module");
static struct workqueue_struct *queue = NULL;//工作队列
//static struct work_struct work;
//原因详见:http://blog.chinaunix.net/space.php?uid=487105&do=blog&cuid=971040
static struct delayed_work work;//表示工作的结构,因为我的是2.6.32版本的ubantu
//work handle
void work_handle(void *data)
{
}
static int init_workqueue(void)//模块装载时处理函数
{
}
static void exit_workqueue(void)//模块卸载时处理
{
}
module_init( init_workqueue );
module_exit( exit_workqueue );
此外有几篇博客是关于workqueue的,推荐:
http://blog.youkuaiyun.com/chchchdx123/archive/2011/03/18/6258034.aspx(很好,全,学习!)
http://blog.youkuaiyun.com/shenbin1430/archive/2009/07/29/4390655.aspx
http://hi.baidu.com/age2cn/blog/item/aa15cf1249044af6c3ce79a6
http://www.embexperts.com/viewthread.php?tid=12
workqueue小结于:2011年4月20日22:59:16
转载请注明出处:http://blog.sina.com.cn/s/blog_642e41c20100qs11.html