Таймеры необходимы, когда надо выполнить
что-то в будущем один раз, а тикеры позволяют
повторять действия через определенные интервалы. Вот
пример того, как тикер выводит сообщение |
|
package main
|
|
import (
"fmt"
"time"
)
|
|
func main() {
|
|
Тикеры используют тот же механизм, что и таймеры:
канал, в который посылаются значения. Здесь мы
будем использовать |
ticker := time.NewTicker(500 * time.Millisecond)
done := make(chan bool)
|
go func() {
for {
select {
case <-done:
return
case t := <-ticker.C:
fmt.Println("Tick at", t)
}
}
}()
|
|
Тикеры могут быть остановлены так же как и таймеры. Когда тикер будет остановлен, он не сможет больше принимать значения в свой канал. Мы остановим его через 1600мс. |
time.Sleep(1600 * time.Millisecond)
ticker.Stop()
done <- true
fmt.Println("Ticker stopped")
}
|
Когда мы запускаем эту программу, тикер должен выполнится 3 раза, после чего остановиться. |
$ go run tickers.go
Tick at 2012-09-23 11:29:56.487625 -0700 PDT
Tick at 2012-09-23 11:29:56.988063 -0700 PDT
Tick at 2012-09-23 11:29:57.488076 -0700 PDT
Ticker stopped
|
Следующий пример: Пулы воркеров (Worker Pools).