Код: Выделить всё
struct event_timer {
uint64_t id;
time_point deadline;
bool recurring;
std::move_only_function callback;
constexpr bool operator
Чтобы обработать повторяющиеся таймеры, мне нужно было бы подтолкнуть обратный вызов таймера с истекшим сроком действия к очереди задачи, но затем также подтолкнуть новый обновленный таймер в очередь таймера. Это потребует возможности копировать обратный вызов, чтобы он мог быть в двух местах одновременно. Вместо этого я перемещаю обратный вызов в новый таймер, и я толкаю ламбу на очередь задач, которая отражает идентификатор таймера. Когда этот лямбда выполняется, она просматривает итератор в соответствующий таймер из std :: unomoromed_map Код: Выделить всё
tasks.emplace([this, id = timer.id] {
if (auto it = timerIterators.find(id); it != timerIterators.end()) {
const_cast(it->second->callback)();
}
});
Подробнее здесь: https://stackoverflow.com/questions/796 ... rcumstance
Мобильная версия