暂停程序
如之前示例中所示,程序有时候需要定期重复某些操作,按照简单的计划执行或是在先前的尝试失败之后执行。在一个循环中执行这类操作时,建议定期暂停程序以防止过于频繁的请求和对 CPU 的不必要负载,同时可以给外部参与者留出时间来处理它们的工作(例如,如果我们正在等待从另一个程序传来数据,加载报价历史记录等等)。
为此,MQL5 提供了 Sleep 函数。本节提供该函数的正式描述,其用法示例将在下一节与用于 时间间隔测量的函数一同给出。
void Sleep(int milliseconds)
该函数将 MQL 程序执行暂停指定毫秒数。暂停时间结束后,Sleep 调用后的指令将继续被执行。
该函数主要适用于 脚本 和 服务 ,因为这些类型的程序没有其它的等待方式。
在 EA 交易和指标中,建议使用 计时器 和 OnTimer 事件。在该方案中,MQL 程序将控制权返回给终端,并将在指定间隔后被再次调用。
此外,无法从指标调用 Sleep 函数,因为指标是在终端接口线程中执行,其执行的中止将影响图表的渲染。
如果用户在 MQL 程序等待调用完成 Sleep 时从终端接口中断 MQL 程序,则会立即(在 100 毫秒内)退出该函数,即暂停比原计划提前结束。这将会设置停止标志 _StopFlag(也可以通过函数 IsStopped完成),程序应会尽快并尽可能正确地停止执行。