bbgo_origin/sigchan/sigchan.go
2020-10-09 13:21:42 +08:00

39 lines
458 B
Go

package sigchan
import "time"
type Chan chan struct{}
func New(cap int) Chan {
return make(Chan, cap)
}
func (c Chan) Drain(duration, deadline time.Duration) (cnt int) {
cnt = 0
deadlineC := time.After(deadline)
for {
select {
case <-c:
cnt++
case <-deadlineC:
return cnt
case <-time.After(duration):
return cnt
}
}
}
func (c Chan) Emit() {
select {
case c <- struct{}{}:
default:
}
}
func (c Chan) Close() {
close(c)
}