A simple thread-based scheduler that sleeps until the next task, and runs it using a task pool. Allows for adding and removing jobs only when not running.
A scheduler is the core component of the library; you add jobs to the job scheduler, and then it will execute these according to the job's schedule.
A job scheduler which offers additional functionality for modifying the set of scheduled jobs after they're submitted.
Defines the scheduler interface, and a simple thread-based implementation of the scheduler.