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

68 строки
Без EOL
2 КиБ
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:
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
//+------------------------------------------------------------------+