Benim yaklaşımım. Çekirdek - Motor. - sayfa 166

 
Nikolai Semko :
Peter, kanıt nerede?
Bir programın yürütme hızlarını bir ex5'te (ex4 ile deneme yapmak anlamsız) ve ikide karşılaştıran araştırma raporu nerede?
Bu arada, yaklaşımınızın avantajlarının en az bir formülasyonunu sizden beklemediğimde, ilk kez ( burada ) benim tarafımdan ifade edilen yalnızca varsayımsal bir varsayımdı.
Bu varsayımımı bir gerçek olarak zaten gölgede bıraktın.
Şahsen, bir kazanç olabileceğini kabul ediyorum, ancak tamamen sezgiye (bilgiye değil) %75 bunun herhangi bir avantaj sağlamayacağını belirtiyorum çünkü. iki program arasındaki etkileşim ve veri alışverişi ücretsiz olmaktan çok uzaktır ve işlemci her ikisi için de birdir ex5. Ancak bu sorunun cevabı ancak geliştiricilerin kendileri veya nitel bir deney tarafından verilebilir.

Sağlayabileceğim programlar arasında düşük maliyetli veri alışverişinin kanıtı. Binlerce karakterlik bir diziyi geçerken bile. Bir deney yaptı. İki test danışmanı bulup bırakacağım. Kaynaklar aracılığıyla iletişim, işlemciyi yüklemez, yalnızca yeniden çizim yapar.

Motor kendi içinde geniş bir amacın işlevselliğini ve yalnızca küçük bir kısmı - kullanıcı GUI'sini biriktirecektir. Diğer bir deyişle, motor belirli bir uygulama tarafından yalnızca kısmen gerekli olan kodu içerecektir ve kodun geri kalanı diğer uygulamalar tarafından diğer çizelgelerde kullanılabilir. Böylece motor, aynı anda farklı Uzman Danışmanlar tarafından kullanılan bir yardımcı fonksiyon merkezine dönüşür ve bu nedenle kendi iş parçacığında çalışan ayrı bir program olmalıdır.

 

Burada. İlk tabloya koyun.

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

Ve bu ikinci.

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

Sağlayabileceğim programlar arasında düşük maliyetli veri alışverişinin kanıtı. Binlerce karakterden oluşan bir diziyi geçerken bile. Bir deney yaptı. İki test danışmanı bulup bırakacağım. Kaynaklar aracılığıyla iletişim, işlemciyi yüklemez, yalnızca yeniden çizim yapar.

Motor kendi içinde geniş bir amacın işlevselliğini ve yalnızca küçük bir kısmı - kullanıcı GUI'sini biriktirecektir. Diğer bir deyişle, motor belirli bir uygulama tarafından yalnızca kısmen gerekli olan kodu içerecektir ve kodun geri kalanı diğer uygulamalar tarafından diğer çizelgelerde kullanılabilir. Böylece motor, aynı anda farklı Uzman Danışmanlar tarafından kullanılan bir yardımcı fonksiyon merkezine dönüşür ve bu nedenle ayrı bir program olması gerekir.

ancak bir motor birkaç programa hizmet ediyorsa, genel süreci o kadar yavaşlatacaktır, çünkü içinde farklı programlar sırayla sunulacak, motor sınıfınızın örnekleri her uygulamada paralel olarak yürütülecektir.
 
İkinci Uzman Danışmanın bir Uyarısı var. Açıkken işlemci yüklenecektir. Yorum yaptığınız anda, yük kaybolacaktır.
 
Nikolai Semko :
ancak bir motor birkaç programa hizmet ediyorsa, genel süreci o kadar yavaşlatacaktır, çünkü içinde farklı programlar sırayla sunulacak, motor sınıfınızın örnekleri her uygulamada paralel olarak yürütülecektir.

Programlar motoru eşzamansız olarak ve gerektiği gibi arayacaktır. Biri, geçtiği diziye dayalı bir grafik oluşturmayı isteyecek, diğeri - değeri formüle göre hesaplamak için, üçüncüsü başka bir şey ... Bütün bunlar tek bir sürekli süreçte değil, bir kez olacak.

Bu durumda motor, uygulamalardan birinin GUI'sini taşıyacak ve gerekirse kullanıcı başka bir uygulamanın GUI'sine geçiş yapacaktır.

 
Motoru uygulamaya sokarsanız, uygulama çok fazla gereksiz olacaktır. Bu nedenle, bireysel bir danışmanın özel ihtiyaçları için motoru keskinleştirmeniz gerekir. Kullanıcı bununla başa çıkamaz. Uzun ve zor. Bu da motorun çok yönlülüğünü geliştirmemi engelleyecek.
 
Реter Konow :
Motoru uygulamaya sokarsanız, uygulama çok fazla gereksiz olacaktır. Bu nedenle, bireysel bir danışmanın özel ihtiyaçları için motoru keskinleştirmeniz gerekir. Kullanıcı bununla başa çıkamaz. Uzun ve zor. Bu da motorun çok yönlülüğünü geliştirmemi engelleyecek.
Sadece anlamsız bir sürü kelime.
 
Nikolai Semko :
Sadece anlamsız bir sürü kelime.

Bunun için söz veriyorum. Ne yaptığımı biliyorum.

 
Реter Konow :

Bunun için söz veriyorum. Ne yaptığımı biliyorum.

inanmayacağım. Bilmiyor musun.