@@ -85,7 +85,8 @@ namespace AMC {
8585
8686 void CStateMachineState::updateExecutionTime ()
8787 {
88- m_LastExecutionTimeStampInMicroseconds = m_pGlobalChrono->getUTCTimeStampInMicrosecondsSince1970 ();
88+ // Use monotonic elapsed time to avoid issues with NTP clock adjustments
89+ m_LastExecutionTimeStampInMicroseconds = m_pGlobalChrono->getElapsedMicroseconds ();
8990 }
9091
9192
@@ -161,8 +162,9 @@ namespace AMC {
161162
162163 if (chunkInMilliseconds < AMC_MINREPEATDELAY_MS)
163164 throw ELibMCCustomException (LIBMC_ERROR_INVALIDREPEATDELAY, m_sInstanceName);
164-
165- uint64_t executionTimeInMicroSeconds = m_pGlobalChrono->getUTCTimeStampInMicrosecondsSince1970 ();
165+
166+ // Use monotonic elapsed time - not affected by NTP or system clock adjustments
167+ uint64_t executionTimeInMicroSeconds = m_pGlobalChrono->getElapsedMicroseconds ();
166168 if (m_LastExecutionTimeStampInMicroseconds > executionTimeInMicroSeconds)
167169 throw ELibMCCustomException (LIBMC_ERROR_INVALIDEXECUTIONDELAY, std::to_string (m_LastExecutionTimeStampInMicroseconds));
168170
@@ -171,7 +173,7 @@ namespace AMC {
171173 while (deltaExecutionTimeInMicroSeconds < (m_nRepeatDelay * 1000ULL )) {
172174 m_pGlobalChrono->sleepMilliseconds (chunkInMilliseconds);
173175
174- uint64_t newExecutionTimeInMicroSeconds = m_pGlobalChrono->getUTCTimeStampInMicrosecondsSince1970 ();
176+ uint64_t newExecutionTimeInMicroSeconds = m_pGlobalChrono->getElapsedMicroseconds ();
175177 if (m_LastExecutionTimeStampInMicroseconds > newExecutionTimeInMicroSeconds)
176178 throw ELibMCCustomException (LIBMC_ERROR_INVALIDEXECUTIONDELAY, std::to_string (m_LastExecutionTimeStampInMicroseconds));
177179
0 commit comments