0
我需要在x
秒後運行一個函數,並具有一定的控制能力(重置計時器,停止計時器,找到剩餘時間執行)。 time.Timer
非常貼合 - 唯一缺少的是它似乎沒有提供找到剩下多少時間的方法。如何查找定時器剩餘的時間?
我有什麼選擇?
此刻,我想的是這樣的:
package main
import "time"
type SecondsTimer struct {
T time.Duration
C chan time.Time
control chan time.Duration
running bool
}
func (s *SecondsTimer) run() {
for s.T.Seconds() > 0 {
time.Sleep(time.Second)
select {
case f := <-s.control:
if f > 0 {
s.T = f
} else {
s.running = false
break
}
default:
s.T = s.T - 1
}
}
s.C <- time.Now()
}
func (s *SecondsTimer) Reset(t time.Duration) {
if s.running {
s.control <- t
} else {
s.T = t
go s.run()
}
}
func (s *SecondsTimer) Stop() {
if s.running {
s.control <- 0
}
}
func NewSecondsTimer(t time.Duration) *SecondsTimer {
time := SecondsTimer{t, make(chan time.Time), make(chan time.Duration), false}
go time.run()
return &time
}
現在我可以用s.T.Seconds()
需要。
但是我對比賽條件和其他類似問題保持警惕。這是要走的路,還是有更多的本土我可以使用?
time.After可能會更好。 – Justlike
time.After(...)也許更好。 – Justlike