协程调度报错
来源:8-12 保存任务日志到mongodb(中)
wenxin_天涯
2019-11-10
//初始化调度器
func InitScheduler() (err error) {
//初始化调度协程参数
W_Scheduler = &Scheduler{
JobEventsChan: make(chan *basics.JobEvent , 1000),
JobPlanTable: make(map[string]*basics.JobSchedulerPlan),
JobExecuteTable: make(map[string]*basics.JobExecuteInfo),
JobResultChan: make(chan *basics.JobExecuteResult , 1000),
}
//启动调度协程
go W_Scheduler.StartScheduler()
return
}
//启动调度器
func (s *Scheduler) StartScheduler() () {
var (
jobEvent *basics.JobEvent
scheduleAfter time.Duration
scheduleTimer *time.Timer
result *basics.JobExecuteResult
)
//初始化一次(1秒)
scheduleAfter = s.TryScheduler()
//调度的延迟定时器
scheduleTimer = time.NewTimer(scheduleAfter)
//监听任务事件
for {
select {
case jobEvent = <- s.JobEventsChan: //任务事件
//对内存中维护的任务列表做增删改查
s.HandleJobEvent(jobEvent)
case <- scheduleTimer.C: //最近的任务时间到期
case result = <- s.JobResultChan: //监听任务执行结果
s.HandleJobResult(result)
}
//调度一次任务
scheduleAfter = s.TryScheduler()
//重置调度间隔
scheduleTimer.Reset(scheduleAfter)
}
}
运行结果报错:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x28 pc=0x900466]
goroutine 1 [running]:
github.com/golang-crontab/worker.InitJobAndListen(0x0, 0x0)
E:/GO/src/github.com/golang-crontab/worker/JobInit.go:48 +0xc6
main.main()
E:/GO/src/github.com/golang-crontab/worker/main/worker.go:60 +0x173
但是 W_Scheduler.StartScheduler()这样调度可以 老师请问这是什么原因
写回答
1回答
-
wenxin_天涯
提问者
2019-11-11
调试找到问题了!老师不用回答了
112019-11-15
相似问题