mirror of
https://github.com/pyihe/go-pkg.git
synced 2025-10-06 16:36:50 +08:00
69 lines
1.1 KiB
Go
69 lines
1.1 KiB
Go
package timepkg
|
|
|
|
import "time"
|
|
|
|
type Timer interface {
|
|
Remain(unit string) int32
|
|
Stop()
|
|
StopTicker()
|
|
After(t time.Duration, handler func())
|
|
Every(t time.Duration, handle func())
|
|
}
|
|
|
|
type myTimer struct {
|
|
timer *time.Timer
|
|
ticker *time.Ticker
|
|
endTime time.Time
|
|
handler func()
|
|
}
|
|
|
|
func NewTimer() Timer {
|
|
return new(myTimer)
|
|
}
|
|
|
|
func (m *myTimer) Remain(unit string) int32 {
|
|
if m.timer == nil {
|
|
return 0
|
|
}
|
|
r := m.endTime.Sub(time.Now())
|
|
switch unit {
|
|
case "H":
|
|
return int32(r.Hours())
|
|
case "M":
|
|
return int32(r.Minutes())
|
|
default:
|
|
return int32(r.Seconds())
|
|
}
|
|
}
|
|
|
|
func (m *myTimer) Stop() {
|
|
if m.timer == nil {
|
|
return
|
|
}
|
|
m.timer.Stop()
|
|
m.timer = nil
|
|
}
|
|
|
|
func (m *myTimer) StopTicker() {
|
|
if m.ticker == nil {
|
|
return
|
|
}
|
|
m.ticker.Stop()
|
|
m.ticker = nil
|
|
}
|
|
|
|
func (m *myTimer) After(t time.Duration, handler func()) {
|
|
m.endTime = time.Now().Add(t)
|
|
m.handler = handler
|
|
m.timer = time.AfterFunc(t, handler)
|
|
}
|
|
|
|
func (m *myTimer) Every(t time.Duration, handle func()) {
|
|
m.ticker = time.NewTicker(t)
|
|
go func() {
|
|
for range m.ticker.C {
|
|
handle()
|
|
}
|
|
}()
|
|
}
|