📄 smcp-timer.c
字号:
#include "smcp-timer.h"#include "smcp-message-factory.h"static timer_t smcp_timers[CURNET_TIMER_NUM];int smcp_create_timers(){ int i; for (i = 0; i < CURNET_TIMER_NUM; i++) { if ((smcp_timers[i] = create_timer(i)) < 0) return -1; } return 0;}int smcp_start__timer(int sec,int wich){ return start_timer(smcp_timers[wich], sec);}int smcp_stop_timer(int wich){ return stop_timer(smcp_timers[wich]);}int smcp_destroy_timer(int wich){ return timer_delete(smcp_timers[wich]);}/*********************************************************** * ***********************************************************/timer_t create_timer(int timer_type){ timer_t time_id; struct sigevent se; memset(&se, 0, sizeof(se)); se.sigev_notify = SIGEV_THREAD; se.sigev_notify_function = timers_handle; se.sigev_value.sival_int = timer_type; if (timer_create(CLOCK_REALTIME, &se, &time_id) < 0) { return -1; } return time_id;}int start_timer(timer_t timer_id, int sec){ struct itimerspec ts, ots; struct timespec cts; clock_gettime(CLOCK_REALTIME, &cts); ts.it_value.tv_sec = cts.tv_sec + sec; ts.it_value.tv_nsec = cts.tv_nsec; ts.it_interval.tv_sec = sec; ts.it_interval.tv_nsec = 0; if (timer_settime(timer_id, TIMER_ABSTIME, &ts, &ots) < 0) { return -1; } return 0;}int stop_timer(timer_t timer_id){ struct itimerspec ts, ots; ts.it_value.tv_sec = 0; ts.it_value.tv_nsec = 0; ts.it_interval.tv_sec = 0; ts.it_interval.tv_nsec = 0; if (timer_settime(timer_id, TIMER_ABSTIME, &ts, &ots) < 0) { return -1; } return 0;}static int alive_check_rru0_timeout_num;static int alive_check_rru1_timeout_num;static int alive_check_rru2_timeout_num;static int alive_check_rru3_timeout_num;void timers_handle(sigval_t v){ switch (v.sival_int) { case SEND_BOOT_NOTIFY_TIMER: boot_notify(); break; case ALIVE_CHECK_RRU0_RETRAINS_TIMER: alive_check_rru0_timeout_num = 0; alive_check(&rru[0]); smcp_start__timer(1, ALIVE_CHECK_RRU0_TIMER); break; case ALIVE_CHECK_RRU1_RETRAINS_TIMER: alive_check_rru1_timeout_num = 0; alive_check(&rru[1]); smcp_start__timer(1, ALIVE_CHECK_RRU1_TIMER); break; case ALIVE_CHECK_RRU2_RETRAINS_TIMER: alive_check_rru2_timeout_num = 0; alive_check(&rru[2]); smcp_start__timer(1, ALIVE_CHECK_RRU2_TIMER); break; case ALIVE_CHECK_RRU3_RETRAINS_TIMER: alive_check_rru3_timeout_num = 0; alive_check(&rru[3]); smcp_start__timer(1, ALIVE_CHECK_RRU3_TIMER); break; case ALIVE_CHECK_RRU0_TIMER: alive_check_rru0_timeout_num++; if (alive_check_rru0_timeout_num < 3) { alive_check(&rru[0]); } else { printf("RRU0 is not alive\n"); smcp_stop_timer(ALIVE_CHECK_RRU0_TIMER); smcp_stop_timer(ALIVE_CHECK_RRU0_RETRAINS_TIMER); } break; case ALIVE_CHECK_RRU1_TIMER: alive_check_rru1_timeout_num++; if (alive_check_rru1_timeout_num < 3) { alive_check(&rru[1]); } else { printf("RRU1 is not alive\n"); smcp_stop_timer(ALIVE_CHECK_RRU1_TIMER); smcp_stop_timer(ALIVE_CHECK_RRU1_RETRAINS_TIMER); } break; case ALIVE_CHECK_RRU2_TIMER: alive_check_rru2_timeout_num++; if (alive_check_rru2_timeout_num < 3) { alive_check(&rru[2]); } else { printf("RRU2 is not alive\n"); smcp_stop_timer(ALIVE_CHECK_RRU2_TIMER); smcp_stop_timer(ALIVE_CHECK_RRU2_RETRAINS_TIMER); } break; case ALIVE_CHECK_RRU3_TIMER: alive_check_rru3_timeout_num++; if (alive_check_rru3_timeout_num < 3) { alive_check(&rru[3]); } else { printf("RRU3 is not alive\n"); smcp_stop_timer(ALIVE_CHECK_RRU3_TIMER); smcp_stop_timer(ALIVE_CHECK_RRU3_RETRAINS_TIMER); } break; } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -