Помогите с алгоритмом нахождения времени, удовлетворяющего условию
Есть некий аналог CRON, в котором необходимо находить время следующего запуска задачи.
Есть расписание, которому должно удовлетворять искомое время:
И текущее время, хранящееся в структуре, аналогичной struct tm из libc, за исключением того, что нумерация месяцев начинается с 1. Для заполнения поля tm_wday (день недели) на основании дня, месяца и года есть специальная функция. Так-же доступно время в виде time_t.
Необходимо найти дату и время, которое строго больше текущего и удовлетворяет условиям, описанным в переменной типа SchedulePacked (если бит, соответствующий номеру минуты, часа и т.д. выставлен в 1, значит это значение допустимо).
Подскажите пожалуйста, как можно реализовать нахождение этого времени оптимальным способом?
Пока из гарантированно работающих вариантов на ум приходит только перебор от текущего времени до бесконечности с шагом в 1 минуту и проверку допустимости на каждой итерации, но, очевидно, что это самый не оптимальный алгоритм.
Есть некий аналог CRON, в котором необходимо находить время следующего запуска задачи.
Есть расписание, которому должно удовлетворять искомое время:
Код:
typedef struct SchedulePacked
{
uint64 minutes; /* минуты (0-59) */
uint32 hours; /* часы (0-23) */
uint32 days; /* числа (1-31) */
uint16 months; /* месяцы (1-12) */
uint8 daysofweek;/* дни-недели (0-6) (воскресенье - это 0) */
} SchedulePacked;
Необходимо найти дату и время, которое строго больше текущего и удовлетворяет условиям, описанным в переменной типа SchedulePacked (если бит, соответствующий номеру минуты, часа и т.д. выставлен в 1, значит это значение допустимо).
Подскажите пожалуйста, как можно реализовать нахождение этого времени оптимальным способом?
Пока из гарантированно работающих вариантов на ум приходит только перебор от текущего времени до бесконечности с шагом в 1 минуту и проверку допустимости на каждой итерации, но, очевидно, что это самый не оптимальный алгоритм.