timer.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // 定时器模块
  2. // 秒寻科技
  3. // zt 2024-10-27
  4. package timer
  5. import (
  6. "context"
  7. "fmt"
  8. "ipsomc/module/bparam/bparamapi"
  9. "ipsomc/public"
  10. "sync/atomic"
  11. "time"
  12. )
  13. var bparamApi bparamapi.BparamApi
  14. var gTimerCounter int32 = 0 //定时器触发计数器
  15. // 创建一个定时器
  16. func CreateTimer(ctx context.Context) {
  17. ticker := time.NewTicker(5 * time.Minute)
  18. defer ticker.Stop()
  19. //获得系统工作模式
  20. sysWorkMode := public.PublicGetSysWorkMode()
  21. // 使用无限循环等待Ticker的触发
  22. for {
  23. select {
  24. case <-ctx.Done():
  25. return // 收到退出信号时终止
  26. case t := <-ticker.C:
  27. if sysWorkMode == 0 {
  28. fmt.Println("定时器触发时间:", t.Format("2006-01-02 15:16:17"))
  29. }
  30. newVal := atomic.AddInt32(&gTimerCounter, 1)
  31. //每15分钟维护一次心跳map(删除心跳map中的数据)
  32. if newVal%3 == 0 {
  33. public.PublicDeleteAllItem()
  34. }
  35. //每两小时更新一次数据库
  36. if newVal >= 24 {
  37. atomic.StoreInt32(&gTimerCounter, 0)
  38. go bparamApi.UpdateBtsStatus(public.Gpub_mapHeart) //修改基站状态
  39. }
  40. }
  41. }
  42. }