Commit 8514ba31 authored by Pavel Vainerman's avatar Pavel Vainerman

(PassiveTimer): перешёл на ещё более "глубокое" использование std::chrono

(убрал сравнение timeout_t и std::chrono::milliseconds).
parent ac4ee7d1
...@@ -99,7 +99,6 @@ class PassiveTimer: ...@@ -99,7 +99,6 @@ class PassiveTimer:
PassiveTimer( timeout_t msec ); /*!< установить таймер */ PassiveTimer( timeout_t msec ); /*!< установить таймер */
virtual ~PassiveTimer(); virtual ~PassiveTimer();
virtual bool checkTime() const; /*!< проверка наступления заданного времени */ virtual bool checkTime() const; /*!< проверка наступления заданного времени */
virtual timeout_t setTiming( timeout_t msec ); /*!< установить таймер и запустить. timeMS = 0 вызовет немедленное срабатывание */ virtual timeout_t setTiming( timeout_t msec ); /*!< установить таймер и запустить. timeMS = 0 вызовет немедленное срабатывание */
virtual void reset(); /*!< перезапустить таймер */ virtual void reset(); /*!< перезапустить таймер */
...@@ -113,8 +112,15 @@ class PassiveTimer: ...@@ -113,8 +112,15 @@ class PassiveTimer:
virtual void terminate(); /*!< прервать работу таймера */ virtual void terminate(); /*!< прервать работу таймера */
protected: protected:
timeout_t t_msec = { 0 }; /*!< интервал таймера, в милисекундах */ timeout_t t_msec = { 0 }; /*!< интервал таймера, в милисекундах (для "пользователей") */
// Т.к. НЕ ВЕСЬ КОД переведён на использование std::chrono
// везде используется timeout_t (и WaitUpTime)
// отделяем внутреннее (теперь уже стандартное >= c++11)
// представление для работы со временем (std::chrono)
// и тип (t_msec) для "пользователей"
std::chrono::high_resolution_clock::time_point t_start; /*!< время установки таймера (сброса) */ std::chrono::high_resolution_clock::time_point t_start; /*!< время установки таймера (сброса) */
std::chrono::milliseconds t_inner_msec; /*!< время установки таймера, мсек (в единицах std::chrono) */
private: private:
}; };
......
...@@ -53,7 +53,7 @@ bool PassiveTimer::checkTime() const ...@@ -53,7 +53,7 @@ bool PassiveTimer::checkTime() const
if( t_msec == 0 ) if( t_msec == 0 )
return true; return true;
return ( std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - t_start).count() >= t_msec ); return ( std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - t_start).count() >= t_inner_msec.count() );
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
...@@ -61,6 +61,12 @@ bool PassiveTimer::checkTime() const ...@@ -61,6 +61,12 @@ bool PassiveTimer::checkTime() const
timeout_t PassiveTimer::setTiming( timeout_t msec ) timeout_t PassiveTimer::setTiming( timeout_t msec )
{ {
t_msec = msec; t_msec = msec;
// не знаю как по другому
// приходиться делать это через промежуточную переменную
std::chrono::milliseconds ms(msec);
t_inner_msec = std::move(ms);
PassiveTimer::reset(); PassiveTimer::reset();
return getInterval(); return getInterval();
} }
......
...@@ -50,7 +50,7 @@ TEST_CASE("PassiveTimer", "[PassiveTimer]" ) ...@@ -50,7 +50,7 @@ TEST_CASE("PassiveTimer", "[PassiveTimer]" )
SECTION( "Check working" ) SECTION( "Check working" )
{ {
PassiveTimer pt(100); PassiveTimer pt(100);
msleep(120); // т.к. точность +-10 мсек.. делаем паузу 60.. а проверяем 50 msleep(120); // т.к. точность +-10 мсек.. делаем паузу больше чем задана..
REQUIRE( pt.getCurrent() >= 110 ); REQUIRE( pt.getCurrent() >= 110 );
CHECK( pt.checkTime() ); CHECK( pt.checkTime() );
INFO("Check reset"); INFO("Check reset");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment