wait.c
---------------------------------------------
#include <linux/module.h> //Needed by all modules
#include <linux/kernel.h> //Needed for KERN_ALERT
static int __init hello_init(void)
{
int timeout;
wait_queue_head_t timeout_wq;
init_waitqueue_head(&timeout_wq);
printk("<1>Waiting for one second\n");
printk("HZ = %d\n", HZ);
sleep_on_timeout(&timeout_wq, HZ); //(1)
timeout = interruptible_sleep_on_timeout(&timeout_wq, HZ);//(2)
printk("timeout = %d\n", timeout);
if (!timeout)
printk("timeout\n");
printk("<1>Hello world.\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT "Goodbye world 1.\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zengxiaolong ");
MODULE_DESCRIPTION("A sample driver");
MODULE_SUPPORTED_DEVICE("testdevice");
(1) 当前进程睡眠1秒后继续运行
(2) 当前进程睡眠1秒,在此期间(1秒内)中断处理程序可以通过wake_up_interruptible(&timeout_wq)唤醒该进程。
---------------------------------------------
#include <linux/module.h> //Needed by all modules
#include <linux/kernel.h> //Needed for KERN_ALERT
static int __init hello_init(void)
{
int timeout;
wait_queue_head_t timeout_wq;
init_waitqueue_head(&timeout_wq);
printk("<1>Waiting for one second\n");
printk("HZ = %d\n", HZ);
sleep_on_timeout(&timeout_wq, HZ); //(1)
timeout = interruptible_sleep_on_timeout(&timeout_wq, HZ);//(2)
printk("timeout = %d\n", timeout);
if (!timeout)
printk("timeout\n");
printk("<1>Hello world.\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT "Goodbye world 1.\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zengxiaolong ");
MODULE_DESCRIPTION("A sample driver");
MODULE_SUPPORTED_DEVICE("testdevice");
(1) 当前进程睡眠1秒后继续运行
(2) 当前进程睡眠1秒,在此期间(1秒内)中断处理程序可以通过wake_up_interruptible(&timeout_wq)唤醒该进程。
如果interruptible_sleep_on_timeout()的返回值为0,表明该进程睡眠期间没有中断处理程序唤醒她。
long interruptible_sleep_on_timeout(wait_queue_head_t*q, long timeout);
在 q 指向的等待队列上注册当前运行中的进程信息,并使调用的进程进入睡眠状态。如果未满足苏醒条件,
即使没有调用 wake_up_interruptible() 函数,只要超过设定的 timeout 值,进程也会自动苏醒。
q : 等待队列变量指针。
timeout : 依赖 Hz 的进程苏醒时间。2.6 内核中以 0.001s 为单位,2.4 内核中以 0.01s 为单位。
返回值:
进程唤醒时,取决于经历多少个 Hz 的时间,返回值的时间值为正数。
941

被折叠的 条评论
为什么被折叠?



