分秒で正確に処理を開始する場合は、0
を入力してから、1時間に切り捨てることは少し難解です(Go)。
タイミングに関するすべての保証を持っているので、時間がビットを毎回シフト条件少なくとも(例えばtime.Sleep(d)
は、少なくとも時間のd
期間にわたってスリープ;ない正確d
)。
func main() {
timer := time.NewTimer(nextDelay())
for {
<-timer.C
timer.Reset(nextDelay())
time.Sleep(time.Minute * 59) // the task, or you could do more tricks with channels
}
}
func nextDelay() time.Duration {
now := time.Now()
return truncateHour(now).Add(time.Hour).Sub(now)
}
func truncateHour(t time.Time) time.Time {
t = t.Truncate(time.Minute * 30)
if t.Minute() > 0 {
t = t.Add(time.Minute * -1).Truncate(time.Minute * 30)
}
return t
}
は、なぜあなただけの時間寝ると 'fmt.Println()'たびに実行されません。これらの要件を
、このコードは、タスクのでしょうか?それでは、条件付きですら必要ない。それが「良い」アプローチだとは言いませんが、探しているコードがあれば、必要なコードが少なくて済みます。 – Lansanaそれは「より良い」ものになるでしょうか?よりシンプルなコード、少ないリソース使用量、より正確なタイミングを探していますか? – Adrian
より正確なタイミングが私の主な目標です。私はその時間に正確に実行したいです。 –