|
Časovače jsou pro situace kdy chcete něco udělat jednou v budoucnu - opakující časovače tickers jsou pro situace kdy chcete něco provádět opakovaně v pravidelném interalu. Tady je příkad opakujícího se časovače který tiká periodicky dokud ho nezastavíme. |
|
![]()
package main
|
|
import (
"fmt"
"time"
)
|
|
func main() {
|
|
|
Opakující časovače používají podobný mechanismus
jako běžné časovače: kanál kterému je posílaná
hodnota. Zde použijeme na kanálu zabudovaný příkaz
|
ticker := time.NewTicker(500 * time.Millisecond)
done := make(chan bool)
|
go func() {
for {
select {
case <-done:
return
case t := <-ticker.C:
fmt.Println("Tik v", t)
}
}
}()
|
|
|
Opakující časovače je možné stejně jako běžné časovače zastavit. Jakmile je časovač zastavený už nedostane do kanálu žádnou další hodnotu. Náš zastavíme po 1600ms. |
time.Sleep(1600 * time.Millisecond)
ticker.Stop()
done <- true
fmt.Println("Ticker zastaven")
}
|
|
Když spustíme tento program, časovač by měl tiknout 3 krát předtím, než ho zastavíme. |
$ go run tickers.go
Tik v 2009-11-10 23:00:00.5 +0000 UTC m=+0.500000001
Tik v 2009-11-10 23:00:01 +0000 UTC m=+1.000000001
Tik v 2009-11-10 23:00:01.5 +0000 UTC m=+1.500000001
Ticker zastaven
|
Další příklad: Zásobníky pracovních rutin (worker pools).