65 lines
982 B
Go
65 lines
982 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
// "sync"
|
||
|
// "math"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
// var wg sync.WaitGroup
|
||
|
// 事件生成器
|
||
|
ch := make(chan string)
|
||
|
go func() {
|
||
|
ch <- "first"
|
||
|
for i :=0 ;; i++ {
|
||
|
ch <- fmt.Sprintf("%v, hhh", i)
|
||
|
time.Sleep(time.Second)
|
||
|
if (i>2) {
|
||
|
i = 0
|
||
|
}
|
||
|
}
|
||
|
}()
|
||
|
// 事件接收器(重复事件执行一次)
|
||
|
eventMap := make(map[string]bool)
|
||
|
go func() {
|
||
|
for {
|
||
|
x := <-ch
|
||
|
eventMap[x] = true
|
||
|
fmt.Printf("recv event: %v\n", x)
|
||
|
}
|
||
|
}()
|
||
|
// 事件处理器
|
||
|
go func() {
|
||
|
for {
|
||
|
if (len(eventMap) > 0) {
|
||
|
worker(eventMap)
|
||
|
eventMap = make(map[string]bool)
|
||
|
}
|
||
|
time.Sleep(time.Second * 10)
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
|
||
|
for {
|
||
|
time.Sleep(time.Second)
|
||
|
}
|
||
|
|
||
|
|
||
|
// for i := 0; i < math.MaxInt32; i++ {
|
||
|
// wg.Add(1)
|
||
|
// go func(i int) {
|
||
|
// defer wg.Done()
|
||
|
// fmt.Println(i)
|
||
|
// time.Sleep(time.Second)
|
||
|
// }(i)
|
||
|
// }
|
||
|
// wg.Wait()
|
||
|
}
|
||
|
|
||
|
func worker(evMap map[string]bool) {
|
||
|
for k,_ := range(evMap) {
|
||
|
fmt.Printf("Handle %v\n", k)
|
||
|
}
|
||
|
}
|