示例#1
0
/* timer_fire --
   Sends all current timer events.
   Returns number of milliseconds until
   next timer event (or a large number)
*/
int
timer_fire(void)
{
  evtime_t now;
  evtime_now(&now);
  while (timers && evtime_cmp(&now,&timers->date)>=0)
    {
      struct event_timer *ti = timers;
      at *p = cons(named("timer"), cons(new_gptr(ti), NIL));
      timers = ti->next;
      event_add(ti->handler, p);
      UNLOCK(p);
      if (ti->period.sec>0 || ti->period.msec>0)
        {
          /* Periodic timer shoot only once per call */
          while(evtime_cmp(&now,&ti->date) >= 0)
            evtime_add(&ti->date,&ti->period,&ti->date);
          ti_insert(ti);
        }
      else
        {
          /* One shot timer */
          free(ti);
        }
    }
  if (timers)
    {
      evtime_t diff;
      evtime_sub(&timers->date, &now, &diff);
      if (diff.sec < 24*3600)
        return diff.sec * 1000 + diff.msec;
    }
  return 24*3600*1000;
}
示例#2
0
文件: event.c 项目: barak/lush
static void ti_insert(event_timer_t *ti)
{
   event_timer_t *et, **p;
   for (p = &timers; (et = *p); p = &(et->next))
      if (evtime_cmp(&ti->date, &et->date)<0)
         break;
   ti->next = et;
   *p = ti;
}
示例#3
0
static void
ti_insert(struct event_timer *ti)
{
  struct event_timer **p;
  struct event_timer *t;
  for (p=&timers; (t = *p); p=&(t->next))
    if (evtime_cmp(&ti->date, &t->date)<0)
      break;
  ti->next = t;
  *p = ti;
}