Есть поток, который выполняет задачи вброшенные к нему в очередь.
Теперь необходимо сделать так, чтобы задачи выполнялись отложено, интервал примерно 100..4000 мс в зависимости от вброшенной задачи, указывается при вбросе задачи.
void push(task, uint32_t timeout); // с таймаутом
1. Сразу хочется заюзать
boost::deadline_timer , на каждую задачу создавать свой таймер. (на первый взгляд стремно)
2. Заюзать вариант #1, но только один таймер для всех задач, с интервалом, скажем в 10-50мс и проверять если ли задачи, готовые к выполнению.
3. timed_mutex: срабатывающий condition_variable по таймеру или по notify (добавление новой задачи). Тогда по каждому событию проверять всю очередь и выполнять задачи, таймаут которых подошел.
В #1 и #2 можно еще заюзать какой-нить map, для оптимизации, ключ — это время, чтобы проверять не всю очередь.
??? другие идеи? Может есть что-то готовое?