This commit is contained in:
Mark McGranaghan 2012-10-09 11:23:14 -07:00
parent a870b9995d
commit eb2a1a1e85
3 changed files with 29 additions and 11 deletions

View File

@ -1,24 +1,43 @@
// ## Timers
// We often want to execute Go code at some point in the
// future, or repeatedly at some interval. Go's built-in
// timer and ticker features make both of these tasks
// easy. First we'll look at timers.
package main
import "time"
import "fmt"
func main() {
timer1 := time.NewTimer(time.Second)
// Timers represent a single event in the future. You
// tell the timer how long you want to wait, and it
// provides a channel that will be notified at that
// time. This timer will wait 2 seconds.
timer1 := time.NewTimer(time.Second * 2)
// The `<-timer1.C` blocks on the timer's channel `C`
// until it sends a value indicating that the timer
// expired.
<-timer1.C
fmt.Println("Timer 1 expired")
stop1 := timer1.Stop()
fmt.Println("Timer 2 stopped:", stop1)
// If you just wanted to wait, you could have used
// `time.Sleep`. One reason a timer may be useful is
// that you can cancel the timer before it expires.
timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 expired")
}()
stop2 := timer2.Stop()
fmt.Println("Timer 2 stopped:", stop2)
}
// todo: pull from blog post
// In this case we'll cancel the timer before it has a
// change to expire (`.Stop()` would return `false` if
// we tried to cancel it after it expired).
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
}

3
src/timers/timers.sh Normal file
View File

@ -0,0 +1,3 @@
$ go run timers.go
Timer 1 expired
Timer 2 stopped

View File

@ -1,4 +0,0 @@
$ go run timers.go
Timer 1 expired
Timer 2 stopped: false
Timer 2 stopped: true