wait_event_interruptible_timeout 函数使当前进程进入可中断的睡眠状态,直到指定的条件成立或者超时时间到达。该函数通常用于等待某个事件的发生,例如设备驱动的完成、内核线程间的同步等。 2. wait_event_interruptible_timeout 函数的返回值类型 wait_event_interruptible_timeout 函数的返回值是一个 long 类型的整数。
返回-ERESTARTSYS:意味着在等待过程中,被信号打断了(因为该函数休眠的状态是TASK_INTERRUPTIBLE,可以被信号中断),用户可以根据这个返回值做进一步的处理,比如可以重新调用wait_event_interruptible_timeout进入休眠等待。 492行用于debug,wait_event_interruptible_timeout在condition不为true时会休眠,因此不能在原子上下文中调...
1. 原型 #define wait_event_interruptible_timeout(wq_head, condition, timeout) \ ({ \ long __ret = timeout; \ might_sleep(); \ if (!___wait_cond_timeout(condition)) \ __ret = __wait_event_interruptible_timeout(wq_head, \ condition, timeout); \ __ret; \ }) 2. 使用场景 ...
wait_event_interruptible(wq,condition); 返回值-ERESTARTSYS表示当前入队的任务被信号中断,为0表示是condition为true导致任务被唤醒。 2.2.5 wait_event_interruptible_timeout wait_event_interruptible_timeout(wq, condition, timeout); 当前入队的任务(TASK_INTERRUPTIBLE)唤醒条件比wait_event_interruptible多了个超时...
__wait_event_interruptible(wq, condition, __ret); \ __ret; \ }) 注: C语言中{a,b, ..., x}的的值等于最后一项,即x,因此上述 宏的值是 __ret。 附2:wait_event_interruptible()和 wake_up的等效代码 wait_event_interruptible(wq, condition) /*等效没有考虑返回值*/ ...
唤醒操作的实现有多种方式,如直接通过wake_up_interruptible或autoremove_wake_function等函数。关于唤醒和调度的问题,如果在超时后condition变为true,即使线程A因优先级低被延迟调度,wait_event_interruptible_timeout仍会返回1,这意味着线程并未因为超时而失败,而是正确地被唤醒。然而,这可能导致对time...
timeout=wait_event_interruptible_timeout(wait_queue,condition,timeout); } 这个用法会进行循环等待,直到超时为止。如果在等待期间被唤醒,将重新进入等待。 •示例4:检测返回值 ret=wait_event_timeout(wait_queue,condition,timeout); if(ret==0){ //等待超时 }else{ //条件满足或者被唤醒 } 这个用法在...
wait_event_interruptible_out的返回值,函数原型:wait_event_interruptible_timeout(wq,condition,timeout)*函数作用:~睡眠~,直到condition为真,或timeout超时;*@wq:要等待的等待队列*@condition:等待事件发生的条件(一个C表达式)*@timeout:超时时间程序是用来睡眠的
if (___wait_is_interruptible(state) && __int) { \ __ret = __int; \ goto __out; \ } \ \ cmd; \ } \ finish_wait(&wq_head, &__wq_entry); \ __out: __ret; \ }) long prepare_to_wait_event(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int st...
[函数返回0表示timeout用完后被唤醒;返回整数表示timeout未用完时就被唤醒,此时可能接收到了一个信号量] wait_event系列函数(作用:等待事件,置于休眠。区别从字面意思即可看出): wait_event(queue, conditon);wait_event_interruptible(queue, condition);wait_event_timeout(queue, condition, timeout);wait_event...