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

 
Nikolai Semko:
彼得,证据在哪里?
哪里有研究报告比较一个程序在一个ex5线程(用ex4实验甚至没有意义)和两个线程的执行速度?
这只是一个假设性的推测,顺便说一下,这是我(在这里)第一次陈述,当时我没有从你那里收到至少一个关于你的方法的优点的表述。
你已经把我的假说当作事实了。
我个人承认可能会有优势,但纯粹根据直觉(不是根据知识),我打赌75%的人不会有任何优势,因为两个程序之间的互动和数据交换是不自由的,而且两个ex5的处理器是一个。但这个问题的答案只能由开发者自己或定性的实验来给出。

我可以为你提供程序间数据交换成本低的证明。即使是在传递一个数千个字符的字符串时。我做了一个实验。我将找到并上传两个测试的EA。通过资源进行的通信不会加载处理器,只是重新绘制。

该引擎将积累广泛的功能,而只有一小部分--用户的GUI。也就是说,引擎将包括只被单独的应用程序部分要求的代码,其余的代码可以被其他图形上的应用程序使用。这样一来,引擎就成了不同的EA同时使用的辅助功能,因此,它应该是一个独立的程序,在自己的线程中运行。

 

在这里。把它放在第一个图形 上。

//+------------------------------------------------------------------+
//|                                                       TEST_2.mq4 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
union Char_Uint{uchar Char[32000]; uint Uint[8000];};
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetMillisecondTimer(16);
   //----------------------------------------------
   if(!ObjectCreate(0,"Resource",OBJ_BITMAP_LABEL,0,0,0))Print("Object is not created!  ",GetLastError());
   else Print("Object created!");
   //-------------------------------
   if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"::Resource"))Print("BMPFILE is not created!");
   else Print("BMPFILE created!");
   //----------------------------------------------
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   Char_Uint u;
   string String = NULL;
   int q = MathRand(),w = 0;
   if(q > 10000)q = 10000;
   //-------------------------------------------------------
   //Формируем случайную строку.
   //-------------------------------------------------------
   for(int a1 = 0; a1 < q; a1++)
      {
       String += (string)a1 + "^";
       w++;
       if(w == 10)
         {
          String += "$";
          w = 0;
         }
      } 
   //-------------------------------------------------------
   //Получаем размер собранной строки.
   //-------------------------------------------------------
   int StrSize = StringLen(String);
   //-------------------------------------------------------
   //Копируем строку в массив Char[].
   //-------------------------------------------------------
   StringToCharArray(String,u.Char);
   //-------------------------------------------------------
   //Cохраняем строку переведенную в байты в ресурсе.
   //-------------------------------------------------------
   if(!ResourceCreate("::Resource",u.Uint,8000,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA))Print("Resource is not created!");
   //-------------------------------------------------------
  }
//+------------------------------------------------------------------+
 

而这个人是在第二个。

//+------------------------------------------------------------------+
//|                                              Resource reader.mq4 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

//+------------------------------------------------------------------+
union Char_Uint
  {
   uchar   Char[32000];
   uint    Uint[8000];   
  };
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   EventSetMillisecondTimer(16); 
   
   if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"\\Experts\\TEST_2.ex4::Resource"))Print("Resource is not connected!");
   else Print("Resource connected!");
//---
   return(INIT_SUCCEEDED);
  }


//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   Char_Uint u;   
   uint width,height;
   string msg[],pars[];
   //-----------------------------
   if(!ResourceReadImage("\\Experts\\TEST_2.ex4::Resource",u.Uint,width,height))Print("Failed to read resource!  ",GetLastError());
   //-----------------------------
   string String = CharArrayToString(u.Char);
   //-----------------------------
    ushort Msep = StringGetCharacter("^",0);
    int s = StringSplit(String,Msep,msg);
    for(int a1 = 0; a1 < s; a1++)
      {
       ushort Psep = StringGetCharacter("$",0);
       StringSplit(msg[a1],Psep,pars);
     }  
   //-----------------------------
   Alert("  String  ",String);
   //-----------------------------
    //------------------------------------------------------------------------------------------------------- 
    ArrayInitialize(u.Char,0);
    ResourceCreate("\\Indicators\\DRIVE.ex4::EA_2_DRIVE",u.Uint,8000,1,0,0,0,COLOR_FORMAT_ARGB_RAW);
    //-------------------------------------------------------------------------------------------------------      
  }
//+------------------------------------------------------------------+
 
Реter Konow:

我可以提供证明,在程序之间交换数据的成本很低。即使是在传输一串数千个字符的时候。我做了一个实验。我将找到并上传两个测试的EA。通过资源进行的通信不会加载处理器,只是重新绘制。

该引擎将积累广泛的功能,而只有一小部分--用户的GUI。也就是说,引擎将包括只被单独的应用程序部分要求的代码,其余的代码可以被其他图形上的应用程序使用。这样一来,发动机就成了不同EA同时使用的辅助功能中心,因此,它必须是一个独立的程序。

但是,如果一个引擎为多个程序服务,那么它就更会拖慢整个过程,因为在其中为不同的程序服务将按顺序发生,而每个应用程序中你的引擎类的实例将并行运行。
 
第二个EA有警报。只要它是开放的,处理器就会有压力。只要你把它注释出来,负载就会消失。
 
Nikolai Semko:
但是,如果你的引擎为几个应用程序服务,那么它就会拖慢整个过程,因为它将按顺序为不同的程序服务,而每个应用程序中你的引擎类的实例将并行运行。

这些程序将根据需要以异步方式访问引擎。一个要求根据传递给它的数组建立一个图形,另一个要求使用一个公式计算一个值,第三个要求是其他东西......所有这些都不会是一个单一的连续过程,而是会不时地发生。

在这种情况下,引擎将携带其中一个应用程序的图形用户界面,而用户将切换到另一个应用程序的图形用户界面。

 
如果你把引擎放在一个应用程序中,应用程序中就会有很多不必要的东西。因此,你需要根据各个EA的具体需求定制引擎。用户将无法应对这种情况。它是漫长而复杂的。它将阻止我发展发动机的多功能性。
 
Реter Konow:
如果你把引擎放在一个应用程序中,应用程序中就会有很多不必要的东西。因此,你需要根据各个EA的具体需求定制引擎。用户将无法应对这种情况。它是漫长而复杂的。而且会干扰发动机的普适性发展。
它只是一组没有任何意义的词语。
 
Nikolai Semko:
只是一堆没有任何意义的词语。

请相信我的话。我知道我在做什么。

 
Реter Konow:

请相信我的话。我知道我在做什么。

不,你不知道。你不知道。
原因: