//+------------------------------------------------------------------+ //| TimeSource.mqh | //| Copyright 2026, MetaQuotes Ltd. | //| www.mql5.com | //+------------------------------------------------------------------+ #ifndef REQUEST_LATENCY_LAB_TIME_SOURCE_MQH #define REQUEST_LATENCY_LAB_TIME_SOURCE_MQH class CTimeSource { private: bool m_synthetic; ulong m_value_us; ulong m_offset_us; public: CTimeSource() { m_synthetic = false; m_value_us = 0; m_offset_us = 0; } void UseLive(void) { m_synthetic = false; } void UseSynthetic(const ulong start_us) { m_synthetic = true; m_value_us = start_us; } bool IsSynthetic() const { return(m_synthetic); } //--- единая точка отсчёта времени лаборатории ulong NowUs(void) { if(m_synthetic) return(m_value_us); return(GetMicrosecondCount() + m_offset_us); } void AdvanceUs(const ulong us); void SetSyntheticUs(const ulong us) { m_value_us = us; } //--- условное ожидание в тестовом режиме (без реального Sleep) void WaitUs(const ulong us) { AdvanceUs(us); } }; //+------------------------------------------------------------------+ //| Внешние определения методов. | //+------------------------------------------------------------------+ void CTimeSource::AdvanceUs(const ulong us) { if(m_synthetic) m_value_us += us; else m_offset_us += us; } #endif // REQUEST_LATENCY_LAB_TIME_SOURCE_MQH //+------------------------------------------------------------------+