2026-09-09 01:19:31 +03:00 | | | //+------------------------------------------------------------------+
|
2026-09-10 16:43:28 +03:00 | | | //| TimeSource.mqh |
|
2026-09-16 15:37:55 +03:00 | | | //| Copyright 2026, MetaQuotes Ltd. |
|
2026-09-10 16:43:28 +03:00 | | | //| www.mql5.com |
|
2026-09-09 01:19:31 +03:00 | | | //+------------------------------------------------------------------+
|
| | | #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;
|
2026-09-09 01:19:31 +03:00 | | |
|
| | | public:
|
2026-09-12 22:14:24 +03:00 | | | CTimeSource()
|
2026-09-09 01:19:31 +03:00 | | | {
|
2026-09-12 22:14:24 +03:00 | | | m_synthetic = false;
|
| | | m_value_us = 0;
|
| | | m_offset_us = 0;
|
2026-09-09 01:19:31 +03:00 | | | }
|
| | |
|
2026-09-12 22:14:24 +03:00 | | | void UseLive(void)
|
2026-09-09 01:19:31 +03:00 | | | {
|
2026-09-12 22:14:24 +03:00 | | | m_synthetic = false;
|
2026-09-09 01:19:31 +03:00 | | | }
|
| | |
|
2026-09-12 22:14:24 +03:00 | | | void UseSynthetic(const ulong start_us)
|
2026-09-09 01:19:31 +03:00 | | | {
|
2026-09-12 22:14:24 +03:00 | | | m_synthetic = true;
|
| | | m_value_us = start_us;
|
2026-09-09 01:19:31 +03:00 | | | }
|
| | |
|
2026-09-12 22:14:24 +03:00 | | | bool IsSynthetic() const { return(m_synthetic); }
|
2026-09-09 01:19:31 +03:00 | | | //--- единая точка отсчёта времени лаборатории
|
2026-09-12 22:14:24 +03:00 | | | ulong NowUs(void)
|
2026-09-09 01:19:31 +03:00 | | | {
|
| | | if(m_synthetic)
|
2026-09-10 16:43:28 +03:00 | | | return(m_value_us);
|
2026-09-12 22:14:24 +03:00 | | | return(GetMicrosecondCount() + m_offset_us);
|
2026-09-09 01:19:31 +03:00 | | | }
|
| | |
|
2026-09-16 15:37:55 +03:00 | | | void AdvanceUs(const ulong us);
|
2026-09-09 01:19:31 +03:00 | | |
|
2026-09-12 22:14:24 +03:00 | | | void SetSyntheticUs(const ulong us)
|
2026-09-09 01:19:31 +03:00 | | | {
|
2026-09-12 22:14:24 +03:00 | | | m_value_us = us;
|
2026-09-09 01:19:31 +03:00 | | | }
|
| | | //--- условное ожидание в тестовом режиме (без реального Sleep)
|
2026-09-12 22:14:24 +03:00 | | | void WaitUs(const ulong us)
|
2026-09-09 01:19:31 +03:00 | | | {
|
| | | AdvanceUs(us);
|
| | | }
|
| | | };
|
2026-09-16 15:37:55 +03:00 | | | //+------------------------------------------------------------------+
|
| | | //| Внешние определения методов. |
|
| | | //+------------------------------------------------------------------+
|
| | | void CTimeSource::AdvanceUs(const ulong us)
|
| | | {
|
| | | if(m_synthetic)
|
| | | m_value_us += us;
|
| | | else
|
| | | m_offset_us += us;
|
| | | }
|
2026-09-09 01:19:31 +03:00 | | |
|
2026-09-12 22:14:24 +03:00 | | | #endif // REQUEST_LATENCY_LAB_TIME_SOURCE_MQH
|
| | | //+------------------------------------------------------------------+
|