27 lines
345 B
Go
27 lines
345 B
Go
|
package ui
|
||
|
|
||
|
type Queue struct {
|
||
|
q chan func(Context)
|
||
|
}
|
||
|
|
||
|
func NewQueue() *Queue {
|
||
|
return &Queue{make(chan func(Context), 4)}
|
||
|
}
|
||
|
|
||
|
func (q *Queue) Do(act func(Context)) {
|
||
|
go func() { // Non-blocking queue
|
||
|
q.q <- act
|
||
|
}()
|
||
|
}
|
||
|
|
||
|
func (q *Queue) Process(ctx Context) {
|
||
|
for {
|
||
|
select {
|
||
|
case act := <-q.q:
|
||
|
act(ctx)
|
||
|
default:
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|