Есть у кого под рукой готовая реализация?
Я накорябал на колене, что то бажненько получилось, охота посмотреть как большие дядьки делают.
Целевое назначение: шедулить задачи в рамках одного потока с микросекундным разрешением(можно порядка 100us), ну и ессно, что бы оно спало, пока задач нет.
Мой цикл выглядит так:
void run() {
std::unique_lock<std::mutex> lock(lock_);
auto wait_condition = [this](){return !tasks_.empty();};
while(started_){
event_.wait(lock, wait_condition);
DeadlineT deadline;
while (started_ && process_tasks(deadline)) {
event_.wait_until(lock, deadline, wait_condition);
}
}
}
//process_tasks - выбирает таски с дэдлайном <= now, выполняет их, возвращает минимальный дэдлайн оставшихся и не пуста ли очередь задач