poll_task.go 612 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package main
  2. import (
  3. "log"
  4. "time"
  5. )
  6. func main() {
  7. log.SetFlags(log.LstdFlags | log.Lshortfile)
  8. interval := 20
  9. sleepTime := time.Second*5
  10. var a []map[int]int64 // id:lasttime
  11. for i := 0; i < 15; i++ {
  12. a = append(a, map[int]int64{i:0})
  13. }
  14. fn := func() {
  15. for id, m := range a {
  16. now := time.Now().Unix()
  17. if m[id] == 0 {
  18. m[id] = now
  19. } else {
  20. if int(now - m[id]) >= interval {
  21. log.Println(id, time.Now())
  22. m[id] = now
  23. time.Sleep(sleepTime)
  24. }
  25. }
  26. }
  27. }
  28. tk := time.NewTicker(time.Second)
  29. go func() {
  30. for range tk.C {
  31. fn()
  32. }
  33. }()
  34. time.Sleep(sleepTime*100)
  35. }