package common import "sync" type PauseSub struct { ctrl *CtrlWait // 回调函数 items []chan int8 m sync.RWMutex } // Add 添加一个暂停项 func (p *PauseSub) Add(item chan int8) { p.m.Lock() defer p.m.Unlock() p.items = append(p.items, item) } // Remove 移除一个暂停项 func (p *PauseSub) Remove(item chan int8) { p.m.Lock() defer p.m.Unlock() for i, v := range p.items { if v == item { p.items = append(p.items[:i], p.items[i+1:]...) } } } // Run 开始监听 func (p *PauseSub) Run() { p.ctrl.Open() defer p.ctrl.Close() for { select { case <-p.ctrl.C: go func() { p.m.RLock() defer p.m.RUnlock() for _, item := range p.items { item <- 1 } }() } } } func NewPauseSub(c *CtrlWait) *PauseSub { return &PauseSub{ ctrl: c, } }