计时器 - 页 6

 
Yurich:
中断是指在执行OnTick的时候,一个更重要的事件,如OnTimer,已经到来。OnTick被暂停,OnTimer代码被执行,然后OnTick又继续运行。
哦,亲爱的。这是个可怕的梦。
 
pusheax:

OnTimer, OnTick, OnTrade...这些都是中断。

我起初也是这么想的。但也有变种。例如,我们不能用interrupts这个词来标记某个OnTimer,并知道它将在事件发生的时刻被精确地调用,从而中断对任何其他事件的处理(根据MSDOS的单线程方案--保存堆栈、处理中断、恢复堆栈、传递控制)。 这种方案可以用更简单的方法解决很多问题。例如,由这个方案调用的OnTick看起来相当不错。这里有一些微妙之处--需要对重复的输入进行处理(例如两个间隔很小的刻度),但一般来说是可以解决的。
 
TheXpert:
该死的地狱。这是个恶梦。
实际上Yurich描述的是经典意义上的中断,而不是OnTick、OnTimer中断处理。
 
例如,如果有人在OnTick处理程序中设置Sleep(100000);那么现在OnTimer、OnTrade根本就没有生命力了?
 
TheXpert:
遗憾的是。是的,这是个可怕的梦。

不,这并不可怕。关于如何避免刘海的问题,有一些久经考验的古老方案。

但这仍然是一个梦想。 我不相信开发商会这样做。 尽管好处是不可否认的。

例如,我可以在OnTimer中运行后台计算,频率不高(大约5秒一次),持续时间为半个定时器周期。而且,也不需要担心处理ticks的问题,它可以直接中断后台计算,然后正确地将其返回到正确的位置。而现在把它放在一个单独的图表上,比在滴答作响的同一线程中正确处理它要容易。虽然在同一条线上会有足够的时间给所有的人。

 
pusheax:
例如,如果有人在OnTick处理程序中设置Sleep(100000);,那么OnTimer和OnTrade 是否就没有生命力了?

计时器的事件,而新的时间点将被忽略。

不要混淆Tick、Trade、Timer事件和它们的处理程序OnTick、OnTrade、OnTimer。

 
pusheax:
例如,如果有人在OnTick处理程序中设置Sleep(100000);,那么OnTimer、OnTrade完全没有生命力?
现在,这正是它的真实情况。但自杀并不是一件困难的事情。 更糟糕的是,当我的屏幕上有一个信息框,而我正在厨房里喝茶。尤里奇提出了一个很好的观点。
 
stringo:
实际上Yurich描述的是经典意义上的中断,而不是OnTick、OnTimer中断处理。

我理解他所描述的情况。

在一个单线程的应用程序中同步数据和中断访问是白痴的极致。

 
MetaDriver:
这就是现在的情况。但自杀并不困难。 当屏幕上有一个信息框,而我在厨房里喝茶的时候,情况会更糟。尤里奇提出了一个很好的观点。
啊,现在我明白了,Timer事件 本身会发生,但它对OnTimer的处理会被推迟到OnTick完成。
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
pusheax:
这可能是它的工作方式。
如果只是这样的话 :)