wait_event_interruptible_timeout 函数使当前进程进入可中断的睡眠状态,直到指定的条件成立或者超时时间到达。该函数通常用于等待某个事件的发生,例如设备驱动的完成、内核线程间的同步等。 2. wait_event_interruptible_timeout 函数的返回值类型 wait_event_interruptible_timeout 函数的返回值是一个 long 类型的整数。
wait_event_interruptible(wq, condition); wait_event_interruptible_timeout 进程进入休眠状态(TASK_INTERRUPTIBLE),直到条件评估为真或接收到信号或超时。每次唤醒等待队列wq时,都会检查该条件。 如果超时后条件评估为false,则返回0;如果超时后情况评估为true,则返回1;如果超时前情况评估为true,则返回剩余的jiffies(至...
返回-ERESTARTSYS:意味着在等待过程中,被信号打断了(因为该函数休眠的状态是TASK_INTERRUPTIBLE,可以被信号中断),用户可以根据这个返回值做进一步的处理,比如可以重新调用wait_event_interruptible_timeout进入休眠等待。 492行用于debug,wait_event_interruptible_timeout在condition不为true时会休眠,因此不能在原子上下文中调...
wait_event_timeout(wait_queue,condition,timeout); 这个用法表示等待条件condition成立,直到超过指定的超时时间timeout。 •示例2:等待事件直到超时或者被唤醒 wait_event_interruptible_timeout(wait_queue,condition,timeout); 与示例1类似,但是如果在等待期间被接收到信号,函数将立即返回。 •示例3:循环等待事件...
wait_event_interruptible_timeout(wq, condition, timeout); 当前入队的任务(TASK_INTERRUPTIBLE)唤醒条件比wait_event_interruptible多了个超时机制。 2.2.6 wait_event_killable wait_event_killable(wq,condition); 当前入队的任务(TASK_KILLABLE)唤醒条件同wait_event_interruptible。
阻塞。wait_event()和wait_event_interruptible()的区别在于后者可以被信号打断,而前者不能。加上 _timeout后的宏意味着阻塞等待的超时时间,以jiffy为单位,在第3个参数的timeout到达时,不论condition 是否满足,均返回。 函数原型: #define wait_event_interruptible(wq, condition) \ ...
wait_event_interruptible_timeout 该函数和前面类似,但是增加了等待时间,还是简单看下__wait_event_interruptible_timeout的for循环 for(;;) { \ prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \if(condition) \break; \if(!signal_pending(current)) { \ ...
wait_event_timeout:不可中断睡眠,当超过指定的 timeout(单位是 jiffies)时间,不管有没有 wake up,还是条件没满足,都要唤醒进程,此时返回的是 0。在 timeout 时间内条件满足返回值为 timeout 或者 1; wait_event_interruptible:可被信号中断的睡眠,被信号打断唤醒时,返回负值 -ERESTARTSYS;wake up 时,条件满足...
wait_event(queue,condition);将当前进程进程的状态设置为 TASK_UNINTERRUPTIBLE ,然后schedule()wait_event_interruptible(queue,condition);TASK_INTERRUPTIBLE ,然后schedule()wait_event_timeout(queue,condition,timeout);TASK_UNINTERRUPTIBLE ,然后schedule_timeout()wait_event_interruptible_timeout(queue,condition,...