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 #pragma once
sgnezdov 0:806403f3d0d1 2
sgnezdov 0:806403f3d0d1 3 #include "LinkedList.h"
sgnezdov 0:806403f3d0d1 4
sgnezdov 0:806403f3d0d1 5 namespace JobScheduler {
sgnezdov 0:806403f3d0d1 6
sgnezdov 0:806403f3d0d1 7 typedef void (jobFunc)(void);
sgnezdov 0:806403f3d0d1 8
sgnezdov 0:806403f3d0d1 9 // Error type uses zero to indicate no Error.
sgnezdov 0:806403f3d0d1 10 // Any other value is an error with error code.
sgnezdov 0:806403f3d0d1 11 typedef int Error;
sgnezdov 0:806403f3d0d1 12
sgnezdov 0:806403f3d0d1 13 const Error NoError = Error(0);
sgnezdov 0:806403f3d0d1 14
sgnezdov 0:806403f3d0d1 15 /**
sgnezdov 0:806403f3d0d1 16 JobType connects job type ID to job function.
sgnezdov 0:806403f3d0d1 17 */
sgnezdov 0:806403f3d0d1 18 class JobType {
sgnezdov 0:806403f3d0d1 19 public:
sgnezdov 0:806403f3d0d1 20 JobType(int jobTypeID, jobFunc *job)
sgnezdov 0:806403f3d0d1 21 : _jobTypeID(jobTypeID), _job(job) {}
sgnezdov 0:806403f3d0d1 22
sgnezdov 0:806403f3d0d1 23 jobFunc *Job();
sgnezdov 0:806403f3d0d1 24
sgnezdov 0:806403f3d0d1 25 bool AscendingExcl(JobType *d2);
sgnezdov 0:806403f3d0d1 26 bool IsEqual(JobType *d2);
sgnezdov 0:806403f3d0d1 27
sgnezdov 0:806403f3d0d1 28 private:
sgnezdov 0:806403f3d0d1 29 int _jobTypeID;
sgnezdov 0:806403f3d0d1 30 jobFunc *_job;
sgnezdov 0:806403f3d0d1 31 };
sgnezdov 0:806403f3d0d1 32
sgnezdov 0:806403f3d0d1 33 /**
sgnezdov 0:806403f3d0d1 34 JobService connects job type ID to job function.
sgnezdov 0:806403f3d0d1 35 */
sgnezdov 0:806403f3d0d1 36 class JobService {
sgnezdov 0:806403f3d0d1 37 public:
sgnezdov 0:806403f3d0d1 38
sgnezdov 0:806403f3d0d1 39 JobService() {}
sgnezdov 0:806403f3d0d1 40
sgnezdov 0:806403f3d0d1 41 /**
sgnezdov 0:806403f3d0d1 42 Register associates jobTypeID with job and stores association.
sgnezdov 0:806403f3d0d1 43 @returns Error if failed to register.
sgnezdov 0:806403f3d0d1 44 */
sgnezdov 0:806403f3d0d1 45 Error Register(int jobTypeID, jobFunc *job);
sgnezdov 0:806403f3d0d1 46
sgnezdov 0:806403f3d0d1 47 /**
sgnezdov 0:806403f3d0d1 48 GetJob returns job function based on jobTypeID.
sgnezdov 0:806403f3d0d1 49 @returns NULL if job is not found.
sgnezdov 0:806403f3d0d1 50 */
sgnezdov 0:806403f3d0d1 51 jobFunc* GetJob(int jobTypeID);
sgnezdov 0:806403f3d0d1 52
sgnezdov 0:806403f3d0d1 53 private:
sgnezdov 0:806403f3d0d1 54 /*
sgnezdov 0:806403f3d0d1 55 _jobs stores job registrations.
sgnezdov 0:806403f3d0d1 56 Current implementation uses LinkedList, because it assumes that
sgnezdov 0:806403f3d0d1 57 number of jobs is no more than 10 or 20.
sgnezdov 0:806403f3d0d1 58 */
sgnezdov 0:806403f3d0d1 59 LinkedList<JobType> _jobs;
sgnezdov 0:806403f3d0d1 60 };
sgnezdov 0:806403f3d0d1 61
sgnezdov 0:806403f3d0d1 62 } // end of namespace