mirror of
https://github.com/pyihe/go-pkg.git
synced 2025-10-07 17:00:51 +08:00
style(go-pkg): rename pkg
This commit is contained in:
68
timepkg/timer.go
Normal file
68
timepkg/timer.go
Normal file
@@ -0,0 +1,68 @@
|
||||
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()
|
||||
}
|
||||
}()
|
||||
}
|
Reference in New Issue
Block a user