Ai
2 Star 3 Fork 0

newdas/video_server

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
runner.go 1.06 KB
一键复制 编辑 原始数据 按行查看 历史
newdas 提交于 2018-08-02 00:22 +08:00 . all
package taskrunner
import (
)
type Runner struct {
Controller controlChan
Error controlChan
Data dataChan
dataSize int
longLived bool
Dispatcher fn
Executor fn
}
func NewRunner(size int, longlived bool, d fn, e fn) *Runner {
return &Runner {
Controller: make(chan string, 1),
Error: make(chan string, 1),
Data: make(chan interface{}, size),
longLived: longlived,
dataSize: size,
Dispatcher: d,
Executor: e,
}
}
func (r *Runner) startDispatch() {
defer func() {
if !r.longLived {
close(r.Controller)
close(r.Data)
close(r.Error)
}
}()
for {
select {
case c:=<-r.Controller:
if c==READY_TO_DISPATCH {
err:=r.Dispatcher(r.Data)
if err!=nil{
r.Error<-CLOSE
} else {
r.Controller <-READY_TO_EXECUTE
}
}
if c==READY_TO_EXECUTE {
err:=r.Executor(r.Data)
if err!=nil {
r.Error <- CLOSE
} else {
r.Controller <- READY_TO_DISPATCH
}
}
case e:=<-r.Error:
if e==CLOSE {
return
}
}
}
}
func (r *Runner) StartAll() {
r.Controller <- READY_TO_DISPATCH
r.startDispatch()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/newdas/video_server.git
git@gitee.com:newdas/video_server.git
newdas
video_server
video_server
cbae10443da8

搜索帮助