MQL中的异步和多线程编程 - 页 26

 
Vladimir Simakov:
同步是程序员的任务,如果你不知道怎么做,你就不要用多线程。创作者的任务是给一个工具,在那里每个人都是一个邪恶的匹诺曹,对自己。同样的a la mutex,自己实现也不成问题。

不幸的是,情况并非如此,MQL的目标受众--是谁? (我认为,是懂得编程基础知识的应用程序员)

而这仍将是MQL5(开发者一再表示,MQL4将不再有更新)。

MQL5本身最初是以异步模式工作的--对历史数据的请求(例如,它要么返回数据,要么在后台开始分页并返回错误)。 这样,在终端和MQL程序之间的数据交换方面,一切都在运作。

而这些时刻已经很令人困惑了,因为你需要不断地检查数据的准备情况,而不是返回值,等等....。当从MQL4转换时,它真的不方便。


这是另一个话题,让我们采取一个简单的MQL-程序结构,异步输入不同的事件....。谁将会成为它的目标?- 谁将是这些必要功能的终端用户?

;)

 
Andrey Barinov:

GUI应该在主EA中旋转,其他一切都在一个单独的EA中。这个独立的从属EA被放置在不可见的OBJ_CHART 上,与主EventSendCustom()路径互动。

我不知道现在的情况如何。以前似乎只有脚本是在OBJ_CHART上运行的。在输入参数方面还有一些特殊性。

试着从Market Watch的所有符号中索取条形图。所有人的历史都已上传。几十秒一个周期的流逝!说句不好听的,对MT5不满意。
 
fxsaber:

我不知道现在的情况如何。以前,似乎只有脚本在OBJ_CHART上运行。在输入参数方面还有一些特殊性。

试图从Market Watch中请求所有符号的条形图。所有上传的历史。几十秒一个周期的流逝!说句不好听的,对MT5不满意。

专家顾问在运行,但滴答和定时器在那里都不起作用。运行一切的唯一方法是通过OnChartEvent(刻度和定时器可以从主EA传递到那里)。

我没有注意到任何其他限制。一切正常。

但你也可以根据同样的原则在普通图表上做同样的事情。(在MT4中我是这样做的,因为那里没有OBJ_CHART。)
 
Andrey Barinov:

顾问启动了,但蜱虫和计时器在那里都不起作用。只有OnChartEvent可以用来启动一切(并且可以从主EA那里发送ticks和计时器)。

我没有注意到任何其他限制。一切正常。

这很好。我不知道这种可能性。你为什么不把gui放在指标中,通过资源进行互动?我是这样想的。EventChartCustom() 最多发送128个符号,一次一个双数和长数,它可以进入OnChartEvent()队列。 在资源中,你可以通过单位放置任何字符和任何类型的值。而且它不排队。当你需要时,你会得到它。
 
Реter Konow:
这很好。我不知道这种可能性。你为什么不把gui放在指示器中,而用资源进行交流?我是这样想的。EventChartCustom()最多发送128个符号,一次一个双数和长数,它可以进入OnChartEvent()队列。 在资源中,你可以通过单位放置任何字符和任何类型的值。而且它不排队。当你需要时,你会得到它。

谢谢,我不知道OnChartEvent。你是通过自定义事件进行同步的吗?数据交换?

 
Реter Konow:
这很好。我不知道有这样的功能。为什么不把gui放在指示器中并使用资源?我是这样想的。EventChartCustom()一次最多发送128个符号,一个双数和一个长数,它可以进入OnChartEvent()队列。 但你可以通过单位向资源投放无限的符号和任何类型的值。而且它不排队。当你需要时,你会得到它。

我没有通过OnChartEvent传递数据。只有活动。否则EA代理中没有事件,这样它就会收到ONTIMER_BEAT 和ONTICK_BEAT。

数据可以通过文件或通过资源进行交换,这取决于任务。我更经常使用文件,因为它们也被用来在重启终端后恢复GUI和其他一切。

你的GUI是否能够记住并在终端重新启动后恢复其外观?

 
fxsaber:

谢谢,我不知道OnChartEvent。你是通过自定义事件进行同步的吗?数据交换?

每一方的每个信息都有一个序列号。当甲方向乙方发送信息时,它首先要看上一条信息是否被读取。如果没有,它不会发送一个新的。当乙方向甲方发送信息时,它也会查看之前的信息是否已经被读取。
 
Andrey Barinov:

我没有通过OnChartEvent传递数据。只有活动。否则EA代理中没有事件,这样它就会收到ONTIMER_BEAT和ONTICK_BEAT。

数据可以通过文件或通过资源进行交换,这取决于任务。我更经常使用文件,因为它们也被用来在重启终端后恢复GUI和其他一切。

你的GUI是否能够记住并在终端重新启动后恢复其图像?

我建议完全取消EventChartCustom(),正是因为队列的原因,它有时会导致停滞。通过资源进行互动,以定时器的频率进行双向请求。例如,如果A面用OnChartEvent()大量加载,而B面发送了一个Cancel按钮事件,那么A面可能会由于一些无稽之谈的加载而晚收到这个事件。

是的,我把内核保存在文件中并从文件中加载。在这种情况下,所有的设置和外观在重启后都会恢复到最后的视图。但是,通常重启后我需要启动设置,所以我不使用这个功能。

 
Реter Konow:

我建议完全取消EventChartCustom(),正是因为队列的原因,它有时会导致速度减慢。 通过资源进行互动,以定时器的频率进行双向请求 。例如,如果A面用OnChartEvent()大量加载,而B面发送了一个Cancel按钮事件,那么A面可能会因为一些无稽之谈的加载而晚收到这个事件。

计时器不工作于在OBJ_CHART 上的EA。 那里没有事件(除了OnChartEvent)。因此,我们必须从主EA那里发送所有的事件(OnTick, OnTimer等)

此外,我不在那里发送按纽。没有必要这样做。
 
Andrey Barinov:

计时器在OBJ_CHART 的EA中不起作用。 那里没有事件(除了OnChartEvent)。因此,所有的事件(OnTick, OnTimer等) 都必须从主EA那里发送。

此外,我不会来回发送按压按钮。没有必要这样做。

我建议将指标作为GUI的载体,将资源作为EA的链接。此外,在MT4中,你将能够使用面板从标准图表中控制专家顾问测试器。所有的控制都可以工作,而不仅仅是按钮。你将能够向被测试的EA发送文本和其他任何东西。我已经测试过了。一切正常。

ZS.而被测试的EA将向常规图表发送不同的数据。