예제 #1
0
파일: core.c 프로젝트: Maxence/node
static void uv__timer_cb(EV_P_ ev_timer* w, int revents) {
  uv_timer_t* timer = container_of(w, uv_timer_t, timer_watcher);

  assert(uv__timer_active(timer));

  assert(uv__timer_active(timer));

  if (!uv__timer_repeating(timer)) {
    timer->flags &= ~UV_TIMER_ACTIVE;
    ev_ref(EV_A);
  }

  if (timer->timer_cb) {
    timer->timer_cb(timer, 0);
  }
}
예제 #2
0
파일: core.c 프로젝트: Maxence/node
int uv_timer_again(uv_timer_t* timer) {
  if (!uv__timer_active(timer)) {
    uv__set_sys_error(timer->loop, EINVAL);
    return -1;
  }

  assert(uv__timer_repeating(timer));
  ev_timer_again(timer->loop->ev, &timer->timer_watcher);
  return 0;
}
예제 #3
0
파일: core.c 프로젝트: Maxence/node
int uv_timer_stop(uv_timer_t* timer) {
  if (uv__timer_active(timer)) {
    ev_ref(timer->loop->ev);
  }

  timer->flags &= ~(UV_TIMER_ACTIVE | UV_TIMER_REPEAT);
  ev_timer_stop(timer->loop->ev, &timer->timer_watcher);

  return 0;
}
예제 #4
0
파일: core.c 프로젝트: geraldfong/svprep
static void uv__timer_cb(EV_P_ ev_timer* w, int revents) {
  uv_timer_t* timer = w->data;

  assert(uv__timer_active(timer));

  if (!uv__timer_repeating(timer)) {
    timer->flags &= ~UV_TIMER_ACTIVE;
    ev_ref(EV_A);
  }

  if (timer->timer_cb) {
    timer->timer_cb(timer, 0);
  }
}
예제 #5
0
파일: core.c 프로젝트: Maxence/node
int uv_timer_start(uv_timer_t* timer, uv_timer_cb cb, int64_t timeout,
    int64_t repeat) {
  if (uv__timer_active(timer)) {
    return -1;
  }

  timer->timer_cb = cb;
  timer->flags |= UV_TIMER_ACTIVE;

  if (repeat)
    timer->flags |= UV_TIMER_REPEAT;
  else
    timer->flags &= ~UV_TIMER_REPEAT;

  ev_timer_set(&timer->timer_watcher, timeout / 1000.0, repeat / 1000.0);
  ev_timer_start(timer->loop->ev, &timer->timer_watcher);
  ev_unref(timer->loop->ev);

  return 0;
}