计时器 - 页 2

 
TheXpert:

还有一件事...你们不是兄弟,是吗?

这并不意味着没有。每个人的任务都是不同的。

在这里,我们开始...我们能读吗?请告诉我,对诱导者来说,它是如何做到的。


  1. 我不这么认为,我甚至不知道它是谁 :D
  2. 好吧,说实话,我还没有遇到过这样的任务,对于我的任务--算得越快越好。
  3. 我很抱歉,我看了一遍))。没有真正进入哪些线程--发生了什么事。我不知道,我从来没有见过这样的事情。 所以这取决于任务,真的,如果我只运行一些随机的脚本,会敲打一个指标。
或者,另外,我可以把所有的计算和所有的东西都塞进一个单独的线程中的dll中--但这听起来像是一种变态。
 

Interesting:

...定时器处理不能被调用,直到前一个定时器处理完成。或者简单地说,OnTimer()将不会得到正确的执行,直到应该处理定时器的线程忙碌起来。

为了说明第二个线程不可能启动定时器处理,你可以使用这个例子(哑巴但很清楚)。

int OnInit()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
EventSetTimer(1);
//----------------------------------------------------------------------------//
return(0);
//----------------------------------------------------------------------------//
}

void OnTimer()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
Print(TimeLocal());
Sleep(2000);
//----------------------------------------------------------------------------//
}
那么,事实证明,Timer 事件和NewTick 事件一样可以被忽略?而在某些条件下,它们不能被放在专家顾问的事件队列中?
 
Yedelkin:
那么,事实证明,定时器 事件可以像NewTick 事件一样被忽略?而且,在某些条件下,它可以从专家顾问的事件队列中排除?
在这种情况下,NewTick事件 是一个例外。对其他类型的事件没有检查。如果事件处理程序的运行速度慢于事件队列的填充速度,队列将溢出,一些事件将被跳过。至于上面的例子,它只证实了EA有一个执行线程,而且事件处理是按照事件排队的顺序依次进行的。
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
antt:
在这种情况下,NewTick事件 是一个例外。对其他事件类型没有检查。如果事件处理程序比事件队列的填充速度慢,队列将溢出,一些事件将被跳过。至于上面的例子,它只证实了EA有一个执行线程,而且事件处理是按照事件排队的顺序依次进行的。

很好,谢谢你的解释!符合逻辑,可以理解,不需要猜测

有趣的是,你关于事件多线程的问题算是得到了解答。我甚至猜到了OnTimer :)

 
Yedelkin:
因此,事实证明,定时器 事件可以像NewTick 事件一样被忽略?而在某些情况下,它们不能在专家顾问的事件中排队?

据我所知,情况是这样的。

1.所有事件都放在同一个队列中。如果队列中有一个NewTick事件,或者这样的事件被处理了,那么NewTick被忽略,不被排队。

2.程序员选择要处理哪些事件。OnTrade、OnTimer和OnTick的处理程序是基本的,在专家顾问中经常使用。

3.在处理一个事件的过程中,其他事件不能被处理。

4.如果事件栈溢出,旧的事件将从队列中删除,不作处理。

5.在上述三种类型的事件中,Trade的生成频率较低,NewTick的生成频率较高(但上述的ticks可能不包括在队列中)。

6.从这个角度看,最有趣的处理程序是OnChartEvent,它处理所有来自图表的事件和自定义事件

而只是大量的这些事件很容易溢出事件队列(如果会有很多这样的事件的话)。

在我看来,这种情况下唯一的救命稻草就是OnChartEvent事件是胡乱地、异步地生成的。

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 

Yedelkin:

有趣的 是,你关于多线程事件处理的 问题似乎得到了解答。我甚至猜到了OnTimer :)

原则上,我对单线程没有疑问,更因为专家顾问本身的代码是在单线程中执行。

而我所描述的是一种关于未来的梦想(比如说,关于MT6),届时MT中会有多线程(至少在事件流因某种原因无法分离之前)。

我原本至少会把所有的ChartEvent事件分开到一个单独的线程中,但开发者知道得更多......

 

有什么方法可以让EA在 特定的时间 产生定时器 事件吗 ?例如,在一小时或一天的最后一分钟的开始。

 
Yedelkin:

有什么方法可以让EA在 特定的时间 产生定时器 事件吗 ?例如,在一小时或一天的最后一分钟的开始。

当然。
 
TheXpert:
当然。
如果不是一个秘密,它(方法)是什么样子的?
 
Yedelkin:
如果不是一个秘密,它(方法)是什么样子的?

使用定时器管理器。我想写一篇文章,但后来不知怎的,我就偏离了方向。虽然它可能看起来不像一篇文章。

由于代码和事件队列的单线程性质,具体的时间是行不通的,但平均误差在一秒以内(最大限度受代码对事件的最大执行时间 限制)。

此外,只有一个定时器。

我可以吗?