This has several advantages: * The time scheduled operations are available for all the executors. This is provided via the scheduling_adaptor class. This is not correct, as your schedulling_adaptor needs an executor that has a timed queue. With my design, only the scheduled_executor would need a timed_queue.
* The non-time scheduled task don't pay for the additional cost to manage with a priority queue. I can override (non-virtually) the submit(work) function in scheduling_adaptor to do this. See above. This doesn't change anything, as the queue is a timed queue and so you will pay for the non-timed operations.
I'm not sure I follow. The scheduling_adaptor takes a template parameter <Executor> that can be any type with an add(work) function. It then forwards the work from itself to Executor when the work comes off the front of the timed_queue. I can override the add(work) function for this adaptor to immediately forward the work to the wrapped Executor type and bypass the queue all together. The current behaviour is to place it in the queue with its timed point as clock::now(), generally placing it at the front. I have an example here: thread/test/test_scheduling_adaptor.cpp Here is the file on GitHub: https://github.com/BoostGSoC14/boost.thread.executors/blob/gsoc/executors/te... This example wraps a basic_thread_pool and adds timed semantics to to it. Ian,