Сравнивая два раза для равенства в пределах терпимости? - PullRequest
1 голос
/ 04 октября 2011

У меня есть приложение MFC, в котором я хочу, чтобы определенный метод вызывался в указанное время.Я укажу время, используя вектор структур tm, у которых заполнены часы, минуты и секунды.Возможно, мне может понадобиться сохранять логическое значение для каждого времени, чтобы указать, был ли метод вызван в указанное время.У меня есть таймер, который срабатывает каждые 50 мс.

В MFC время не гарантируется, что оно будет срабатывать с указанным интервалом.Я хочу убедиться, что метод вызывается, даже если он отключен на несколько секунд.Мое приложение в настоящее время не требует точного времени (хотя я открыт для него, если есть простое решение).Моя текущая мысль о том, как это сделать, состоит в том, чтобы допустить некоторое проскальзывание, чтобы я позволил времени равняться +/- нескольким секундам.Кажется ли это разумным способом добиться этого?

Я хочу проверить, равны ли два раза в пределах определенного допуска в секундах.Каков наилучший способ сделать это в C ++?У меня есть доступ к объекту CTime и / или объекту struct tm (и, возможно, к другим структурам данных времени Windows)

ОБНОВЛЕНИЕ

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

1 Ответ

7 голосов
/ 04 октября 2011

Вам нужно использовать mktime , чтобы получить time_t.time_t - это, как правило, количество секунд с начала 1970 года, поэтому вам не нужно беспокоиться о 2:10:59 против 2: 11: 01.

struct tm expected_tm;
struct tm actual_tm;

// set those tms to something

time_t expected_time = mktime( &expected_tm );
time_t actual_time = mktime( &actual_tm );

if ( abs( expected_time - actual_time ) < 5 ) // for 5s tolerance
{
    // GOOD
}
else
{
     // BAD
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...