управлять повторяющимися событиями в расписании C - PullRequest
0 голосов
/ 10 ноября 2010

- ОБНОВЛЕНИЕ -

хорошо, это то, что я понял до сих пор.

для события, которое должно проходить, скажем, раз в две недели, это то, что я сделал.

  1. конвертировать метку времени по расписанию и текущую метку времени в unix time
  2. (schduleTime - currentTime)% 14 // 14, потому что через 2 недели это может быть любое число
  3. это скажет мне, если сегодня две недели с момента последнего запуска мероприятия.

для и событие, которое должно выполняться каждые x месяцев или лет

Есть некоторые другие проверки, которые необходимо выполнить, прежде чем перейти к фактическим вычислениям

например, чтобы убедиться, что сейчас самое подходящее время ... и т.д.

  1. убедитесь, что сегодня та же дата, что и в щ
  2. если дата верна, то "(ScheduelMonth - currentMonth)% 2" скажем, что она должна запускаться каждые 2 месяца

простой пример

отметка времени начала события 2010 - 11 - 23 каждые 3 месяца

теперь давайте представим, что сегодняшняя дата 2011 - 02 - 23

тогда расчеты будут выглядеть следующим образом.

if (Sch_Date == Current_Data) // if (23 == 23)

if (! ((Sch_Month - Current_Month)% 3)) // if (! ((11-2)% 3) // что равно нулю

Надеюсь, в этом есть смысл, дайте мне знать, если я что-то упустил

1

Привет,

Я программирую микро STM32, и мне нужно создать механизм планирования, который позволит пользователю планировать выполнение задач в заданные промежутки времени.

У меня есть RTC, который предоставит мне текущую метку времени. Часть, в которой я застреваю - это как справляться с повторяющимися событиями.

т.

, если пользователь хочет, чтобы что-то запускалось каждую пятницу, но еженедельно, раз в две недели, ежемесячно или ежегодно.

пользователь предоставляет мне время начала и окончания и повторяющийся флаг, который говорит мне, в какие дни он хочет, чтобы это запускалось и как часто.

Надеюсь, я прояснил это достаточно.

Если у вас есть идеи и / или вопросы, мы будем благодарны

Обновление

Это моя конкретная проблема.

У меня есть устройство, проверяющее время от времени, чтобы увидеть, должна ли какая-либо из записей в расписании запускаться. Я думаю, что лучший способ описать это своим примером

пользователь отправляет это событие

время начала 2010 11 09 Вт 16 30 00

время окончания 2012 11 09

повторяющиеся флаги каждый вторник каждые две недели

Я могу проверить, готово ли событие к запуску, но как мне справиться с тем фактом, что оно должно происходить только каждые две недели, мне нужна помощь в кодировании алгоритма для обработки рекурсии

Ответы [ 2 ]

3 голосов
/ 10 ноября 2010

На основании того, что вы назвали своей конкретной проблемой:

Для каждой новой записи рассчитайте и запишите временную метку первого времени, когда событие должно сработать (например, 2010-11-09_16:30).Когда событие срабатывает, рассчитайте временную метку для следующего времени, которое требуется для запуска события, на основе флагов (например, 2010-11-23_16:30) и замените запись.

Обратите внимание, что, вероятно, лучшеперевести все метки времени в нечто стандартное, например Unix time .

1 голос
/ 10 ноября 2010

Я реализовал подобную систему и реализовал ее как , описанную Оли Чарльзуортом . У меня был стол с графиком. При включении питания создается список всех следующих событий с указателем на исходную запись таблицы и сортируется их так, что мне нужно только проверить первую запись в таблице (позже я использовал RTC, который может вызвать прерывание на определенном этапе. время). Когда событие сработало, я проверил, что запись пользователя может быть удалена или необходимо остаться в таблице, а событие перенесено.

...