mql5-execution-microstructu.../Include/RequestLatencyLab/TimeSource.mqh

68 lines
2 KiB
MQL5

//+------------------------------------------------------------------+
//| 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:
2026-09-12 22:14:24 +03:00
bool m_synthetic;
ulong m_value_us;
ulong m_offset_us;
public:
2026-09-12 22:14:24 +03:00
CTimeSource()
{
2026-09-12 22:14:24 +03:00
m_synthetic = false;
m_value_us = 0;
m_offset_us = 0;
}
2026-09-12 22:14:24 +03:00
void UseLive(void)
{
2026-09-12 22:14:24 +03:00
m_synthetic = false;
}
2026-09-12 22:14:24 +03:00
void UseSynthetic(const ulong start_us)
{
2026-09-12 22:14:24 +03:00
m_synthetic = true;
m_value_us = start_us;
}
2026-09-12 22:14:24 +03:00
bool IsSynthetic() const { return(m_synthetic); }
//--- единая точка отсчёта времени лаборатории
2026-09-12 22:14:24 +03:00
ulong NowUs(void)
{
if(m_synthetic)
return(m_value_us);
2026-09-12 22:14:24 +03:00
return(GetMicrosecondCount() + m_offset_us);
}
void AdvanceUs(const ulong us);
2026-09-12 22:14:24 +03:00
void SetSyntheticUs(const ulong us)
{
2026-09-12 22:14:24 +03:00
m_value_us = us;
}
//--- условное ожидание в тестовом режиме (без реального Sleep)
2026-09-12 22:14:24 +03:00
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;
}
2026-09-12 22:14:24 +03:00
#endif // REQUEST_LATENCY_LAB_TIME_SOURCE_MQH
//+------------------------------------------------------------------+