Exemplo n.º 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;
}
Exemplo n.º 2
0
Arquivo: event.c Projeto: barak/lush
static void *timer_add_sub(at *handler, int sec, int msec, int period)
{
   if (handler) {
      add_notifier(handler, (wr_notify_func_t *)ti_notify, 0);
      event_timer_t *et = mm_alloc(mt_event_timer);
      assert(et);
      et->date.sec = sec;
      et->date.msec = msec;
      et->period.sec = period/1000;
      et->period.msec = period%1000;
      et->handler = handler;
      et->next = 0;
      ti_insert(et);
      return et;
   }
  return 0;
}
Exemplo n.º 3
0
static void *
timer_add_sub(at *handler, int sec, int msec, int period)
{
  struct event_timer *ti;
  if (handler)
    {
      add_finalizer(handler, ti_finalize, 0);
      if (! (ti = malloc(sizeof(struct event_timer))))
        error(NIL,"Out of memory", NIL);
      ti->date.sec = sec;
      ti->date.msec = msec;
      ti->period.sec = period/1000;
      ti->period.msec = period%1000;
      ti->handler = handler;
      ti->next = 0;
      ti_insert(ti);
      return ti;
    }
  return 0;
}