Re: Отложенное выполнение задачи
От: zaufi Земля  
Дата: 05.10.15 10:25
Оценка: 6 (3)
Здравствуйте, szag, Вы писали:

S>Есть поток, который выполняет задачи вброшенные к нему в очередь.

S>Теперь необходимо сделать так, чтобы задачи выполнялись отложено, интервал примерно 100..4000 мс в зависимости от вброшенной задачи, указывается при вбросе задачи.
S>
S>void push(task, uint32_t timeout); // с таймаутом
S>


S>3. timed_mutex: срабатывающий condition_variable по таймеру или по notify (добавление новой задачи). Тогда по каждому событию проверять всю очередь и выполнять задачи, таймаут которых подошел.

S>В #1 и #2 можно еще заюзать какой-нить map, для оптимизации, ключ — это время, чтобы проверять не всю очередь.
S>??? другие идеи? Может есть что-то готовое?

при постановке задачи в в очередь вычисляешь время, когда ее нужно запустить. очередь делаешь с приоритетом (время запуска). новые задачи втыкаешь в порядке приоритета. спишь на condition'e до начала запуска первой (топовой) задачи или втыкания новой задачи в очередь... -- все тривиально достаточно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.