job scheduler works with run once and run periodic schedules. Stop logic is not fully thought through.
Dependents: JobSchedulerDemo Borsch
Diff: scheduler.cpp
- Revision:
- 4:78bcd5a675e1
- Parent:
- 3:f08f55827736
- Child:
- 5:d8f69ac330f2
--- a/scheduler.cpp Tue Jul 11 21:47:53 2017 +0000 +++ b/scheduler.cpp Tue Jul 11 22:05:12 2017 +0000 @@ -37,9 +37,15 @@ Scheduler *self = static_cast<Scheduler*>(thisPointer); self->updateHandler(); } + + void Scheduler::runAdapter(void *thisPointer) { + Scheduler *self = static_cast<Scheduler*>(thisPointer); + self->runHandler(); + } void Scheduler::Start() { _updater.start(callback(Scheduler::updateAdapter, this)); + _runner.start(callback(Scheduler::runAdapter, this)); } void Scheduler::Stop() { @@ -49,6 +55,7 @@ void Scheduler::WaitToStop() { _updater.join(); + _runner.join(); } Response<JobID> Scheduler::JobAdd(JobTypeID jobTID, ISchedule *schedule, IJobData *data) { @@ -58,7 +65,7 @@ return Response<JobID>(1, 0); } JobAddReq req(apt); - _actions.put(&req); + _updates.put(&req); // default is wait forever osEvent evt = req.resQueue.get(); if (evt.status == osEventMessage) { @@ -83,14 +90,14 @@ static JobRunReq jobRunReq; void Scheduler::onWakeOnce() { - _actions.put(&jobRunReq); + _updates.put(&jobRunReq); } void Scheduler::updateHandler() { while (!_quit) { printf("[Scheduler::updateHandler] waiting for action\n"); // wait forever ... - osEvent evt = _actions.get(); + osEvent evt = _updates.get(); if (evt.status == osEventMessage) { printf("[Scheduler::updateHandler] process action\n"); this->process((Action*)evt.value.p); @@ -147,8 +154,24 @@ // process job printf("[Scheduler::process] running job ID %d\n", wakeJob->GetID()); _timeline.remove(1); + _runs.put(wakeApt); } + } + + void Scheduler::runHandler() { + while (!_quit) { + printf("[Scheduler::runHandler] waiting for action\n"); + // wait forever ... + osEvent evt = _runs.get(); + if (evt.status == osEventMessage) { + printf("[Scheduler::runHandler] run action\n"); + Appointment *apt = (Appointment*)evt.value.p; + printf("[Scheduler::runHandler] TBD: RUN, RESCHEDULE\n"); + } else { + printf("[Scheduler::runHandler] NOT osEventMessage\n"); + } + } + } - } } \ No newline at end of file