Advertisement
Guest User

Untitled

a guest
Jul 6th, 2015
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "os"
  6. "os/signal"
  7. "time"
  8.  
  9. "golang.org/x/net/context"
  10. )
  11.  
  12. func main() {
  13. c1, cancel := context.WithCancel(context.Background())
  14.  
  15. exitCh := make(chan struct{})
  16. go func(ctx context.Context) {
  17. for {
  18. fmt.Println("In loop. Press ^C to stop.")
  19. // Do something useful in a real usecase.
  20. // Here we just sleep for this example.
  21. time.Sleep(time.Second)
  22.  
  23. select {
  24. case <-ctx.Done():
  25. fmt.Println("received done, exiting in 500 milliseconds")
  26. time.Sleep(500 * time.Millisecond)
  27. exitCh <- struct{}{}
  28. return
  29. default:
  30. }
  31. }
  32. }(c1)
  33.  
  34. signalCh := make(chan os.Signal, 1)
  35. signal.Notify(signalCh, os.Interrupt)
  36. go func() {
  37. select {
  38. case <-signalCh:
  39. cancel()
  40. return
  41. }
  42. }()
  43. <-exitCh
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement