C ++ - написание планировщика с использованием std :: difftime - как проверить время (ЧЧ: ММ: СС) в течение дня? - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь получить свою программу, если событие достигается в течение дня

например, я хочу иметь возможность создавать события в 10:00:00, чтобы задача выполнялась в тот момент дня (только один раз)

поэтому у меня есть эта функция, которая может сказать, что время прошло, но оно всегда вернет истину после 10:00 (параметр времени)

bool Tools::passedTimeToday(std::time_t time)
{
    auto now = std::chrono::system_clock::now();
    std::time_t _now = std::chrono::system_clock::to_time_t(now);
    if (std::difftime(_now,time)<0)
        return false;
    else
        return true;
}

как мне проверить, что время прошло только один раз?

я использую какой-то эпсилон в это время? какое значение я должен использовать для этого эпсилона?

    double delta = std::difftime(_now,time);
    if ( (delta<0) && (delta>-epsilon) )
    {
        ...

Я имею в виду, что это может сработать, но что, если моя программа проверит это условие слишком поздно (больше, чем epsilon)?

Я думал об использовании вместо этого логического флага (обработанный bool), но затем каждый раз, когда я запускаю программу, она также запускает все задачи, которые произошли в то время

любая помощь приветствуется

спасибо

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Вот мой способ сделать это

Я принимаю задания только в течение 5 секунд

bool Tools::passedTimeToday(std::time_t time)
{
    auto now = std::chrono::system_clock::now();
    std::time_t _now = std::chrono::system_clock::to_time_t(now);
    double delta = std::difftime(_now,time);

    if ( (delta>0) && (delta<5) )
        return true;
    else
        return false;
}
0 голосов
/ 06 марта 2019
  1. Создание списка с запланированными задачами и их следующим временем выполнения, отсортированным по следующему времени выполнения.

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

  3. Переходите к шагу 2, если список не пуст.

...