gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/myx/slowtime/整点执行.go (about) 1 package slowtime 2 3 import ( 4 "time" 5 ) 6 7 func M每X毫秒整点(每X毫秒 int, handler func(), afterHandler func(difTime time.Duration)) { 8 9 time.Sleep(time.Duration(计算误差时间(time.Now(), int64(每X毫秒)))) 10 //fmt.Println("M每毫秒整点", time.Now().Format("2006-01-02 15:04:05.999999999")) 11 for { 12 prevTime := time.Now() 13 if handler != nil { 14 handler() 15 } 16 afterTime := time.Now() 17 if afterHandler != nil { 18 afterHandler(afterTime.Sub(prevTime)) 19 } 20 time.Sleep(time.Duration(计算误差时间(afterTime, int64(每X毫秒)))) 21 //fmt.Println("M每毫秒整点", time.Now().Format("2006-01-02 15:04:05.999")) 22 } 23 } 24 25 func 计算误差时间(now time.Time, 每X毫秒 int64) int { 26 dif := now.UnixNano() - (now.UnixMilli()/每X毫秒)*int64(time.Millisecond)*每X毫秒 27 sleepTime := int64(time.Millisecond)*每X毫秒 - dif 28 if sleepTime < 0 { 29 sleepTime = 0 30 } 31 return int(sleepTime) 32 }