Mi enfoque. El núcleo es el motor. - página 166

 
Nikolai Semko:
Peter, ¿dónde están las pruebas?
¿Dónde está el informe de investigación que compara la velocidad de ejecución de un programa en un hilo de ex5 (ni siquiera tiene sentido experimentar con ex4) y en dos hilos?
Era sólo una suposición hipotética, que, por cierto, fue expuesta por primera vez por mí ( aquí), cuando no recibí de usted al menos una formulación de ventajas de su planteamiento.
Ya estás usando mi hipótesis como un hecho.
Personalmente admito que puede haber una ventaja, pero por pura intuición (no por conocimiento) apuesto un 75% a que no dará ninguna ventaja, ya que la interacción e intercambio de datos entre los dos programas no es libre, y el procesador es uno para ambos ex5. Pero la respuesta a esta pregunta sólo la pueden dar los propios desarrolladores o un experimento cualitativo.

Puedo proporcionarle una prueba del bajo coste del intercambio de datos entre programas. Incluso al pasar una cadena de miles de caracteres. He hecho un experimento. Buscaré y subiré dos EAs de prueba. La comunicación a través de los recursos no carga el procesador, sólo redibuja.

El motor acumulará una amplia gama de funcionalidades, y sólo una pequeña parte - la GUI del usuario. Es decir, el motor incluirá código que sólo será requerido parcialmente por una aplicación independiente, y el resto del código podrá ser utilizado por otras aplicaciones en otros gráficos. De esta manera, el motor se convierte en una funcionalidad auxiliar utilizada por diferentes EAs al mismo tiempo, y por lo tanto, debe ser un programa independiente que se ejecuta en su propio hilo.

 

Aquí. Ponlo en el primer gráfico.

//+------------------------------------------------------------------+
//|                                                       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!");
   //-------------------------------------------------------
  }
//+------------------------------------------------------------------+
 

Y éste está en el segundo.

//+------------------------------------------------------------------+
//|                                              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:

Puedo aportar pruebas del bajo coste del intercambio de datos entre programas. Incluso cuando se transfiere una cadena de miles de caracteres. Hice un experimento. Buscaré y subiré dos EAs de prueba. La comunicación a través de los recursos no carga el procesador, sólo redibuja.

El motor acumulará una amplia gama de funcionalidades, y sólo una pequeña parte - la GUI del usuario. Es decir, el motor incluirá código que sólo será requerido parcialmente por una aplicación independiente, y el resto del código podrá ser utilizado por otras aplicaciones en otros gráficos. De esta manera, el motor se convierte en un centro funcional auxiliar utilizado por diferentes EAs al mismo tiempo, y por lo tanto, debe ser un programa independiente.

Pero si un motor sirve a múltiples programas, entonces más se ralentizará el proceso general, porque servir a diferentes programas en él ocurrirá secuencialmente, mientras que las instancias de su clase de motor en cada aplicación se ejecutarán en paralelo.
 
El segundo EA tiene Alerta. Mientras esté abierto, el procesador estará estresado. En cuanto lo comente, la carga desaparecerá.
 
Nikolai Semko:
Pero si su motor sirve a varias aplicaciones, entonces ralentizará todo el proceso, porque servirá a diferentes programas secuencialmente, mientras que las instancias de su clase de motor en cada aplicación se ejecutarán en paralelo.

Los programas accederán al motor de forma asíncrona y según sea necesario. Uno pedirá que se construya un gráfico basado en el array que se le pase, el otro que se calcule un valor usando una fórmula, el tercero algo más... Todo esto no será un único proceso continuo, sino que se producirá de vez en cuando.

En este caso, el motor llevará la GUI de una de las aplicaciones, y el usuario cambiará a la GUI de otra aplicación.

 
Si pones el motor en una aplicación, hay un montón de cosas innecesarias en la aplicación. Por lo tanto, hay que adaptar el motor a las necesidades específicas de cada EA. El usuario no podrá hacer frente a eso. Es largo y complicado. Y me impedirá desarrollar la versatilidad del motor.
 
Реter Konow:
Si pones el motor en una aplicación, hay un montón de cosas innecesarias en la aplicación. Por lo tanto, hay que adaptar el motor a las necesidades específicas de cada EA. El usuario no podrá hacer frente a esto. Es largo y complicado. Y esto interferirá en el desarrollo de la universalidad del motor.
Es sólo un conjunto de palabras sin ningún significado.
 
Nikolai Semko:
Sólo un montón de palabras sin ningún significado.

Sólo tienes que creer en mi palabra. Sé lo que estoy haciendo.

 
Реter Konow:

Sólo tienes que creer en mi palabra. Sé lo que estoy haciendo.

No, no es así. No es así.
Razón de la queja: