我的方法。核心是引擎。 - 页 147

 

一般来说,这个问题几乎已经解决了。

  1. 我们需要EA的每个副本创建两个自己的资源--一个用于向引擎写消息,另一个用于从引擎读取消息。
  2. 引擎需要在资源中进行循环,看看有多少份EA在不同的对上运行。
  3. 该引擎将创建一个正在运行的EA的动态列表,用户将通过该列表切换连接。
  4. 接下来,引擎将记录用于发送消息和接收EA消息的资源的名称。

  1. 每个EA将正常运行,并以通常的方式向引擎写入它们的信息。引擎只有在连接到该EA时才会读取这些信息。
  2. 引擎将在连接事件上向EA发送一个命令,引擎将向资源写入一个单独的参数内核。
  3. 引擎将加载这个内核。接下来,它将循环浏览GUI元素并重新绘制它们,以便它们携带最新的信息。
  4. 在这之后,引擎将把它的信息写到其资源中的EA中,以接收信息。

目前,所有的EA通过一个共同的资源访问引擎。目标是每个顾问都有一个单独的资源来与引擎沟通。而引擎将能够为不同的EA重新连接资源。
 
我感到困惑的是,比方说,如果发动机运行时有第六个顾问,那么五个顾问将传送全部的工作包。其他五人应暂时被禁止传送工作信息。让他们只需 "听从电波"。
 
Oleg Papkov:
我感到困惑的是,比方说5个EA将传输全部的工作包,如果引擎运行时有第六个。其他五人应暂时被禁止传送工作信息。让他们只需 "听从电波"。

我同意。这很有道理。

所以它们会正常工作,但不会向资源写入信息。只对参数内核的一个副本。而当连接时,将把参数内核写入资源,引擎将加载它。一旦连接,专家顾问将开始为引擎写消息到消息资源。

 

问题是关于连接。

该引擎向所有EA暴露了一个小的字符串地址。具有相同识别地址的EA中的内核被召回,标准的引擎顾问操作自动开始。当引擎切换到另一个EA时,引擎会将它正在工作的EA的内核切换到地址等待状态,就像那一刻的其他EA一样。此时,所有的EA都被断开了,引擎正在等待引擎需要的另一个EA的地址。

新EA的内核会做出反应,并进入标准运行状态。下一次,引擎继续发送终点,等待的状态没有改变。除了标准交换,专家顾问还必须分析一个流程,以检查工作线的末端是否出现在其中。在交换数据包的开头,必须有一个字符串,表明数据包是由引擎发给谁的。该内核收到控制数据包,并开始以指定的频率发送其状态的数据包。

其他的则等待他们通过每个EA的独特识别字符串来解决。切换时,引擎会向当前的EA发送一个寿命终止的字符串。EA停止发送任何东西,进入识别自己的识别字符串的状态,这同时也是与引擎交换的标准工作的开始。

 
Oleg Papkov:

问题是关于连接。

该引擎向所有EA暴露了一个小的字符串地址。具有相同识别地址的EA中的内核被召回,标准的引擎顾问操作自动开始。当引擎切换到另一个EA时,引擎会将它正在工作的EA的内核切换到地址等待状态,就像那一刻的其他EA一样。此时,所有的EA都被断开了,引擎正在等待引擎需要的另一个EA的地址。

新EA的内核会做出反应,并进入标准运行状态。下一次,引擎继续发送终点,等待的状态没有改变。除了标准交换,专家顾问还必须分析一个流程,以检查工作线的末端是否出现在其中。在交换数据包的开头,必须有一个字符串,表明数据包是由引擎发给谁的。该内核收到控制数据包,并开始以指定的频率发送其状态的数据包。

其他的则等待他们通过每个EA的独特识别字符串来解决。在切换时,引擎会向当前的EA发送一个寿命终止的字符串。EA停止发送任何东西,进入识别自己的识别字符串的状态,这同时也是与引擎交换的标准工作的开始。

资源方面则有些简单。你不需要一个地址,只需要一个资源名称。你有一个更复杂的模型。这更简单。

核心是一个简单的值数组。每个专家顾问将在其中写入其GUI元素的参数值。必要时,EA将把内核参数的副本保存到资源中,引擎将读取它并重新绘制GUI。

原则上,这是一个简单的任务,但有许多小的细微差别。例如,关于开始和停止与EA通信的信息。我们只需要考虑格式问题。


顺便说一句,我已经成功地加快了沟通速度,减少了缓慢的程度。然而,我还没有理解其中的原因。它发生在重绘过程中,但奇怪的是,重绘本身并不是制动的。但在与资源沟通时,重新绘制的速度就慢了。原因尚不清楚。

 

投入某种时间成本监测。要看它在哪里放慢了速度。以及如何绕过它。

也许我把它弄得有点复杂。我不知道它在你的发动机内是如何组织的。我只是在用逻辑。

 
Oleg Papkov:

投入某种时间成本监测。要看它在哪里放慢了速度。以及如何绕过它。

也许我把它弄得有点复杂。我不知道它在你的发动机内是如何组织的。我只是在用逻辑。

逻辑让你更接近重点,一般来说,你的理解是正确的。

今天,我将试图弄清刹车的原因。下面就很清楚了--重绘本身并没有放慢速度。写入和读取资源的速度也不慢。但我们一起得到了缓慢。

 
有监控,哪种操作能持续多长时间?它们必须按顺序进行。在EA中,它们,采取数据并将其发送到引擎的频率为,例如,30ms。当一个线程被发送到引擎时,它是否准备好接收?或者它是做什么的?
 
Oleg Papkov:
有监控,哪个操作需要多长时间?它们应按顺序进行。专家顾问执行它们,捕捉数据并以例如30毫秒的频率将它们发送到引擎。当一个线程被发送到引擎时,它是否准备好接收?或者它是做什么的?

现在正在检查一切。

引擎以30ms的频率从EA读取消息资源,而EA则以相同的频率从引擎读取消息资源。在同一频率上,他们都向对方写信息(如果有什么可写的话)。所有这些都不会导致任何速度减慢。另外,重绘本身,并不引起制动。

然而,如果在引擎端有重绘和写/读资源的组合,就会出现速度下降。这方面的原因还不清楚。想明白了。

 
Реter Konow:

现在正在检查一切。

引擎以30ms的频率从EA读取消息资源,而EA则以相同的频率从引擎读取消息资源。在同一频率上,他们都会给对方写信息(如果有什么要写的话)。所有这些都不会导致任何速度减慢。另外,重绘本身,并不引起制动。

然而,如果在引擎端有重绘和写/读资源的组合,就会出现速度下降。这方面的原因还不清楚。检查一下吧。

也许是不匹配:EA和引擎,1-都互相发送,2-都接收,它们的OnTimer周期不同步。等待意外同步的时刻,才能正常工作。这可能是原因吗?

原因: