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