void wheel_timer::add_one_shot(timer_callback* callback, tick_ms_t delay_ms) { size_t target = (cursor_ + (delay_ms / slot_interval_)) % slot_count_; if (target == cursor_) { // 현재 실행 중일 수 있기 때문에 다음 슬롯에 등록시킨다. target = (cursor_ + 1) % slot_count_; } slots_[target].push_back(timer_unit(callback, tick::now_ms() + delay_ms)); }
void service_start(const char *config) { initialize(config); worker_queue_init(); timer_init(service_timer_dispatch, service_alloc); socket_init(service_alloc); struct module log_mod = { log_dispatch, log_create, log_release, }; g.log = service_create(&log_mod, service_env_get("log")); service_create(&lua_mod, service_env_get("main")); int thread = atoi(service_env_get("thread")); start(thread); socket_unit(); timer_unit(); finalize(); }
void HeapTimer::add_expire_timer(time_t expire, std::string echo){ tm_queue.push(timer_unit(expire, echo)); }
void HeapTimer::add_delay_timer(time_t delay, std::string echo){ tm_queue.push(timer_unit(time(NULL)+delay, echo)); }