一言以弊之:在指定的时间内去查询是否有时间发生
APP:poll
函数彻底分析:
APP:poll调用过程!
sys_poll
return do_sys_poll(ufds, nfds, &timeout_jiffies);
poll_initwait(&table); //初始化函数
init_poll_funcptr(&pwq->pt, __pollwait); // 做了这个事情
do_poll(nfds, head, &table, timeout);
for (;;)
{
for (; pfd != pfd_end; pfd++) // 查询多个驱动程序!
{
//判断do_pollfd,最终调用到驱动程序的POLL函数,如果驱动程序中的poll函数返回值不为0的话,count++
if (do_pollfd(pfd, pt)) <== mask = file->f_op->poll(file, pwait); return mask;
{ //然后调用到poll函数中的poll_wait(file, &button_waitq, wait);
count++; // 函数作用:把当前进程挂到button_waitq队列里去,并不会立即休眠
pt = NULL;
}
//如果count不为0 或者超时 或者有信号在等待处理,就跳出,返回到APP:poll
if (count || !*timeout || signal_pending(current))
break;
/ */假设上面三个条件都不成立的话,就进行休眠!休眠__timeout这么一段时间ÿ