int swTimer_add(swTimer *timer, int ms) { swTimer_node *node = sw_malloc(sizeof(swTimer_node)); if (node == NULL) { swWarn("malloc failed."); return SW_ERR; } bzero(node, sizeof(swTimer_node)); node->lasttime = swTimer_get_ms(); node->interval = ms; if (ms < timer->interval) { int new_interval = swoole_common_divisor(ms, timer->interval); timer->interval = new_interval; if (SwooleG.use_timerfd) { swTimer_timerfd_set(timer, new_interval); } else { swTimer_signal_set(timer, new_interval); } } swHashMap_add_int(timer->list, ms, node); timer->num++; return SW_OK; }
static long swTimer_add(swTimer *timer, int msec, int interval, void *data) { if (interval == 0) { return swTimer_addtimeout(timer, msec, data); } swTimer_node *node = sw_malloc(sizeof(swTimer_node)); if (node == NULL) { swWarn("malloc failed."); return SW_ERR; } bzero(node, sizeof(swTimer_node)); node->interval = msec; if (gettimeofday(&node->lasttime, NULL) < 0) { swSysError("gettimeofday() failed."); return SW_ERR; } if (msec < timer->interval) { int new_interval = swoole_common_divisor(msec, timer->interval); timer->interval = new_interval; swTimer_set(timer, new_interval); } swHashMap_add_int(timer->list, msec, node, NULL); timer->num++; return SW_OK; }
long swTimer_addtimeout(swTimer *timer, int timeout_ms, void *data) { int new_interval = swoole_common_divisor(timeout_ms, timer->interval); if (new_interval < timer->interval) { swTimer_set(timer, new_interval); timer->interval = new_interval; } struct timeval now; if (gettimeofday(&now, NULL) < 0) { swWarn("gettimeofday() failed. Error: %s[%d]", strerror(errno), errno); return SW_ERR; } uint32_t now_ms = now.tv_sec * 1000 + now.tv_usec / 1000; swTimer_node *node = sw_malloc(sizeof(swTimer_node)); if (node == NULL) { swWarn("malloc(%d) failed. Error: %s[%d]", (int ) sizeof(swTimer_node), strerror(errno), errno); return SW_ERR; } bzero(node, sizeof(swTimer_node)); node->data = data; node->exec_msec = now_ms + timeout_ms; node->id = timer->_next_id++; swTimer_node_insert(&timer->root, node); return node->id; }
int swTimer_add(swTimer *timer, int ms) { swTimer_node *node = sw_malloc(sizeof(swTimer_node)); if (node == NULL) { swWarn("swTimer_add malloc fail"); return SW_ERR; } bzero(node, sizeof(swTimer_node)); node->lasttime = swTimer_get_ms(); node->interval = ms; if(ms < timer->interval) { int new_interval = swoole_common_divisor(ms, timer->interval); timer->interval = new_interval; #if defined(HAVE_TIMERFD) && SW_WORKER_IPC_MODE == 1 swTimer_timerfd_set(timer, new_interval); #else swTimer_signal_set(timer, new_interval); #endif } swHashMap_add_int(&timer->list, ms, node); timer->num++; return SW_OK; }