ev_idle

ev_idle在没有更高优先级的事件后触发.

当没有别的事情做了… 只要您的进程忙于处理具有相同或更高优先级的socket、Timer、signal,ev_idle在此期间就不会被触发.

而一旦您的进程(长期)处于空闲状态, ev_idle则会在每次事件迭代中被调用一次直到被主动停止.

ev_idle还有一个应用场景就是可以做为伪后台程序的方式运行, 并且为其完成一些需要延迟善后的工作.

相关函数

ev_idle_init (ev_idle *, callback);

// 初始化、激活ev_idle, 他没有任何其他有意义的参数. ev_set_idle也没有什么意义.
ev_idle_start (struct ev_loop , ev_idle );

例子

// 只需导入单个头文件
#include <ev.h>
#include <stdio.h>

// 输出后退出.
static void idle_cb (struct ev_loop *loop, ev_idle *w, int revents)
{
  puts ("Hello world.");
  ev_break(loop, EVBREAK_ALL);
}

int main (void)
{
  // 可以使用已定义的宏来获取默认的事件循环, 当然你也可以根据自己的需求创建指定的.
  struct ev_loop *loop = EV_DEFAULT;

  ev_idle idle;
  ev_idle_init(&idle, idle_cb);
  ev_idle_start(loop, &idle);

  // 开始运行事件循环
  ev_run (loop, 0);

  // 如果事件循环退出, 那将会执行到这里.
  return 0;
}