时间间隔计数器
要检测精确到秒的时间间隔,只需计算使用 TimeLocal 获得的两个 datetime 值之间的差值。然而,有时候我们需要更高的精度。为此,MQL5 提供了用于获得系统毫秒 (GetTickCount, GetTickCount64) 或微秒 (GetMicrosecondCount) 的计数器。
uint GetTickCount()
ulong GetTickCount64()
这两个函数返回自操作系统加载以来已经过去的毫秒数。计时精度受限于标准系统计时器(约 10 到 15 毫秒)。要获得更精确的间隔测量值,可使用 GetMicrosecondCount 函数。
对于 GetTickCount 函数,返回类型 uint 预先确定了计数器溢出的时间周期:约 49.7 天。换言之,如果超过该时间段后计算机仍未关闭,则计数又将从 0 开始。
相比之下,GetTickCount64 函数返回 ulong 值,该计数器在可预见的未来(584'942'417 年)之内将不会溢出。
ulong GetMicrosecondCount()
该函数返回自从 MQL 程序启动以来已经过去的微秒数。
该计数器函数和 Sleep 的使用示例在 TimeCount.mq5 脚本中汇总。
void OnStart()
{
const uint startMs = GetTickCount();
const ulong startMcs = GetMicrosecondCount();
// loop for 5 seconds
while(PRTF(GetTickCount()) < startMs + 5000)
{
PRTF(GetMicrosecondCount());
Sleep(1000);
}
PRTF(GetTickCount() - startMs);
PRTF(GetMicrosecondCount() - startMcs);
}
|
下面是该脚本日志输出的大致内容。
GetTickCount()=12912811 / ok
GetMicrosecondCount()=278 / ok
GetTickCount()=12913903 / ok
GetMicrosecondCount()=1089845 / ok
GetTickCount()=12914995 / ok
GetMicrosecondCount()=2182216 / ok
GetTickCount()=12916087 / ok
GetMicrosecondCount()=3273823 / ok
GetTickCount()=12917179 / ok
GetMicrosecondCount()=4365889 / ok
GetTickCount()=12918271 / ok
GetTickCount()-startMs=5460 / ok
GetMicrosecondCount()-startMcs=5458271 / ok
|