Отложенное выполнение задачи
От: szag  
Дата: 05.10.15 10:15
Оценка:
Есть поток, который выполняет задачи вброшенные к нему в очередь.
Теперь необходимо сделать так, чтобы задачи выполнялись отложено, интервал примерно 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, для оптимизации, ключ — это время, чтобы проверять не всю очередь.
??? другие идеи? Может есть что-то готовое?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.