job scheduler works with run once and run periodic schedules. Stop logic is not fully thought through.

Dependencies:   LinkedList

Dependents:   JobSchedulerDemo Borsch

Committer:
sgnezdov
Date:
Tue Jul 11 00:16:08 2017 +0000
Revision:
0:806403f3d0d1
Child:
9:ee21cd055a97
basic JobScheduler implementation with core producer - consumer thread safe design; functional, but really bare bones

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sgnezdov 0:806403f3d0d1 1 #include "jobService.h"
sgnezdov 0:806403f3d0d1 2
sgnezdov 0:806403f3d0d1 3 namespace JobScheduler {
sgnezdov 0:806403f3d0d1 4
sgnezdov 0:806403f3d0d1 5 jobFunc* JobType::Job()
sgnezdov 0:806403f3d0d1 6 {
sgnezdov 0:806403f3d0d1 7 return this->_job;
sgnezdov 0:806403f3d0d1 8 }
sgnezdov 0:806403f3d0d1 9
sgnezdov 0:806403f3d0d1 10 bool JobType::AscendingExcl(JobType *j2)
sgnezdov 0:806403f3d0d1 11 {
sgnezdov 0:806403f3d0d1 12 return this->_jobTypeID < j2->_jobTypeID;
sgnezdov 0:806403f3d0d1 13 }
sgnezdov 0:806403f3d0d1 14
sgnezdov 0:806403f3d0d1 15 bool JobType::IsEqual(JobType *j2)
sgnezdov 0:806403f3d0d1 16 {
sgnezdov 0:806403f3d0d1 17 return this->_jobTypeID == j2->_jobTypeID;
sgnezdov 0:806403f3d0d1 18 }
sgnezdov 0:806403f3d0d1 19
sgnezdov 0:806403f3d0d1 20 bool jtAscending(JobType *j1, JobType *j2)
sgnezdov 0:806403f3d0d1 21 {
sgnezdov 0:806403f3d0d1 22 return j1->AscendingExcl(j2);
sgnezdov 0:806403f3d0d1 23 }
sgnezdov 0:806403f3d0d1 24
sgnezdov 0:806403f3d0d1 25 bool jtIsEqual(JobType *j1, JobType *j2)
sgnezdov 0:806403f3d0d1 26 {
sgnezdov 0:806403f3d0d1 27 return j1->IsEqual(j2);
sgnezdov 0:806403f3d0d1 28 }
sgnezdov 0:806403f3d0d1 29
sgnezdov 0:806403f3d0d1 30 Error JobService::Register(int jobTypeID, jobFunc *job)
sgnezdov 0:806403f3d0d1 31 {
sgnezdov 0:806403f3d0d1 32 JobType *jt = new JobType(jobTypeID, job);
sgnezdov 0:806403f3d0d1 33 node<JobType> *tmp = _jobs.insertOrdered(jt, jtAscending);
sgnezdov 0:806403f3d0d1 34 if (NULL == tmp) {
sgnezdov 0:806403f3d0d1 35 error("[JobService::Register] failed to insertOrdered");
sgnezdov 0:806403f3d0d1 36 return Error(1);
sgnezdov 0:806403f3d0d1 37 }
sgnezdov 0:806403f3d0d1 38 return NoError;
sgnezdov 0:806403f3d0d1 39 }
sgnezdov 0:806403f3d0d1 40
sgnezdov 0:806403f3d0d1 41 jobFunc* JobService::GetJob(int jobTypeID)
sgnezdov 0:806403f3d0d1 42 {
sgnezdov 0:806403f3d0d1 43 JobType search = JobType(jobTypeID, NULL);
sgnezdov 0:806403f3d0d1 44 node<JobType> *found = _jobs.pop(&search, jtIsEqual);
sgnezdov 0:806403f3d0d1 45 if (found == NULL) {
sgnezdov 0:806403f3d0d1 46 return NULL;
sgnezdov 0:806403f3d0d1 47 }
sgnezdov 0:806403f3d0d1 48 return found->data->Job();
sgnezdov 0:806403f3d0d1 49 }
sgnezdov 0:806403f3d0d1 50
sgnezdov 0:806403f3d0d1 51 } // end of namespace