MQL'de asenkron ve çok iş parçacıklı programlama - sayfa 19

 
Igor Makanu :
...


bir kez daha tekrarlıyorum: ticaret terminalinin neden buna ihtiyacı olduğu sorusuna cevap verin.

...

Ve terminal tek bir akışta mı çalışıyor? Sette ise, hepsi aynı, neden gerekli?)))

 
Реter Konow :

Çok konuşabilirsin.

hmm, ve topikstarter'ın olduğu yere mi gidiyorsun? - Çok yazıyor ama okumuyor ve gelişmek istemiyor musunuz? - Sadece makaleyi anlamak için değil, okumak için bile linkimi takip etmeye vaktiniz olmazdı, işte son bulduğum şeyden, işte kodum “Yaşlıların 3. ekranlarında”, birine yazdım, benim kod yapısı her zaman yaklaşık olarak böyledir (temel mantığı değiştiren daha fazla iyileştirme olmaması koşuluyla, bir kod vardır ... başlangıçta doğrusal yapılandırılmış bir koda dönüştürebileceğinizi hatırlamamak daha iyidir ((( )

 void OnTick ()
  {
   int takeprofit,stoploss,hstart= 0 ; 
   double lot,h[];
   CopyClose (symbol,PeriodSecondary,hstart,HistoryCount,h);
   ENUM_CMD CMD1,CMD2,CMD3;
   CMD1 = ind1();
   CMD2 = ind2();
   CMD3 = ind3();
   if (NewBar())
     {
      DeleteOrdersLimits(Magic);
       if (CMD1==CMD_BUY && CMD2==CMD_BUY && CMD3==CMD_BUY)
        {
         CalcTakeProfitStopLoss(takeprofit,stoploss);
         lot=CalcLot(stoploss);
         if (ReversSignal)SELL_STOP_PR(Low[ 1 ],lot,Magic,stoploss,takeprofit); else BUY_STOP_PR(High[ 1 ],lot,Magic,stoploss,takeprofit);
        }
       if (CMD1==CMD_SELL && CMD2==CMD_SELL && CMD3==CMD_SELL)
        {
         CalcTakeProfitStopLoss(takeprofit,stoploss);
         lot=CalcLot(stoploss);
         if (ReversSignal)BUY_STOP_PR(High[ 1 ],lot,Magic,stoploss,takeprofit); else SELL_STOP_PR(Low[ 1 ],lot,Magic,stoploss,takeprofit);
        }
     }
  }
//+------------------------------------------------------------------+

aşağıda tüm hizmet işlevleri olacak, ancak ana kodun kendisi - TS'nin kendisi en okunaklı ve en doğrusal mantıktır, her zaman bu şekilde yazdım, Üniversitede öğretmenler yalnızca bu tür kaynakları el işi olarak kabul ettiler, aksi takdirde geçmeyeceksin )))


bu ne için? - evet, bir kez daha: multithreading sadece başka bir çözüm yoksa kullanılmalıdır, tıpkı bunun gibi, yeterli programcıların hiçbiri asenkron işlemlerle çalışmayacaktır! - yaralıyor! ))))


bir örnek sizden olacak: ticaret terminalinin neden buna ihtiyacı var sorusuna cevap verin.

 
Yuriy Asaulenko :
Evet, rıhtımlarda var, ama gerçekte yok. Anladığım kadarıyla.
Volchansky bunun hakkında yazdı ve Renat ona cevap verdi.
Genel olarak, tek iş parçacıklı bir programda ve üçüncü taraf yazılımlarla etkileşim olmadan geri aramalara neden ihtiyaç duyulduğunu hayal etmek benim için zor.

Şimdi denedim. Her şey çalışıyor.

MQL'de onlar için gerçekten pratik bir kullanım olmamasına rağmen.

 
Igor Makanu :

Ticaret terminalinin neden buna ihtiyacı olduğu sorusuna cevap verin.

Hepsi çoklu iş parçacığının ek yükünü unuttu. Ve çirkinler.)
 
Igor Makanu :
...


bir örnek sizden olacak: ticaret terminalinin neden buna ihtiyacı var sorusuna cevap verin.

Sana zaten cevap verdim. Görmezden geliyorsun.

1. Çoklu iş parçacığına ihtiyacım var çünkü programlarım çok daha karmaşık. Bir çok ağır işlevi tek bir programda birleştirmek istiyorum. 3D görselleştirme, sunucu ile iletişim, GUI ve çeşitli hesaplamalar. Bir iş parçacığı yeterli değil. Bu nedenle, programı parçalara ayırmanız veya standart çoklu kullanım kullanmanız gerekir. Eğer mevcut değilse, programı parçalara ayıracağım.

2. Terminal kendi başına çok iş parçacıklıdır. Neden çoklu kullanıma ihtiyacı var - geliştiricilerine sorun. Neden çoklu iş parçacığına ihtiyacım var - 1. maddeye bakın.

 

Igor Makanu

bir örnek sizden olacak: ticaret terminalinin neden buna ihtiyacı var sorusuna cevap verin.

En bariz olanı, onsuz kendim idare etmeme rağmen, özellikle gine için kritik olan ayrı bir arayüz iş parçacığıdır.

Not: Eğer öyleyse, çoklu kullanım için kampanya yapmıyorum.

 
Реter Konow :

Sana zaten cevap verdim. Görmezden geliyorsun.

1. Çoklu iş parçacığına ihtiyacım var çünkü programlarım çok daha karmaşık. Bir çok ağır işlevi tek bir programda birleştirmek istiyorum. 3D görselleştirme, sunucu ile iletişim, GUI ve çeşitli hesaplamalar. Bir iş parçacığı yeterli değil. Bu nedenle, programı parçalara ayırmanız veya standart çoklu kullanım kullanmanız gerekir. Eğer mevcut değilse, programı parçalara ayıracağım.

2. Terminal kendi başına çok iş parçacıklıdır. Neden çoklu kullanıma ihtiyacı var - geliştiricilerine sorun. Neden çoklu iş parçacığına ihtiyacım var - 1. maddeye bakın.

Ayrıca sana yazdıklarını da görmezden geliyorsun, zaten yazdım: ayrı uçar - pirzola ayrı! GUI ve ticaret stratejisi aynı kodda yürütülmemelidir!

Grafik arayüzlere yaklaşımınızla ilgili konunuzda, kodunuzun verimli olmadığı söylendi ve bazı fonksiyonları ayrı bir iş parçacığına atmanın performansınızı artıracağını mı düşünüyorsunuz? - performans artmayacak, ancak ek saçmalıklar olacak, şimdi her şeyi nasıl senkronize edeceğim))))

Not: Android ile ilgili konularda 4pda'daki kullanıcıların iletişimini hatırladım - cihazlar, kullanıcılar yalnızca boş bellek miktarına göre bellenim sürümünün etkinliğine ikna oldular ve tam tersi - ne kadar boş bellek, bellenim o kadar dik, ancak ne yazık ki, işletim sisteminin tüm kaynakları verimli kullanması gerektiğine dair bir anlayış yoktur - bellek de dahil olmak üzere, çok fazla boş bellek varsa, işletim sisteminin kaynakları verimli kullandığı bir gerçek değildir. Yani sizinle, bir iş parçacığında performans elde edemezsiniz, bu da daha fazla iş parçacığına ihtiyacınız olduğu anlamına gelir! - belki de dilin yetenekleri ile ilgili değil (platformlar, işletim sistemi ..), geliştirici hakkında? - belki etkili değildir? ;) - geçen yıl bir dizi makaleden grafik arayüzleri kontrol ettim ve KB'de bariz bir yavaşlama görmedim, her şey iyi bir seviyede çalışıyor. Bu kodların kaynaklarına, arayüz öğelerini atlama şemalarına baktım, OOP kendilerine yaklaşıyor - her şey Windows'taki grafik ilkelerine çok benziyor - neden her şey onlar için çalışıyor, ama sizin için değil? )))))) - belki de hepsi aynı, ilk yaklaşım doğru değildi? ya da teorik eğitim her iki pençede de topal mı?

 
Igor Makanu :

Ayrıca sana yazdıklarını da görmezden geliyorsun, zaten yazdım: ayrı uçar - pirzola ayrı! GUI ve ticaret stratejisi aynı kodda yürütülmemelidir!

Grafik arayüzlere yaklaşımınızla ilgili konunuzda, kodunuzun verimli olmadığı söylendi ve bazı fonksiyonları ayrı bir iş parçacığına atmanın performansınızı artıracağını mı düşünüyorsunuz? - performans artmayacak, ancak ek saçmalıklar olacak, şimdi her şeyi nasıl senkronize edeceğim))))

Not: Android ile ilgili konularda 4pda'daki kullanıcıların iletişimini hatırladım - cihazlar, kullanıcılar yalnızca boş bellek miktarına göre bellenim sürümünün etkinliğine ikna oldular ve tam tersi - ne kadar boş bellek, bellenim o kadar dik, ancak ne yazık ki, işletim sisteminin tüm kaynakları verimli kullanması gerektiğine dair bir anlayış yoktur - bellek de dahil olmak üzere, çok fazla boş bellek varsa, işletim sisteminin kaynakları verimli kullandığı bir gerçek değildir. Yani sizinle, bir iş parçacığında performans elde edemezsiniz, bu da daha fazla iş parçacığına ihtiyacınız olduğu anlamına gelir! - belki de dilin yetenekleri ile ilgili değil (platformlar, işletim sistemi ..), geliştirici hakkında? - belki etkili değildir? ;) - geçen yıl bir dizi makaleden grafik arayüzleri kontrol ettim ve KB'de bariz bir yavaşlama görmedim, her şey iyi bir seviyede çalışıyor. Bu kodların kaynaklarına, arayüz öğelerini atlama şemalarına baktım, OOP kendilerine yaklaşıyor - her şey Windows'taki grafik ilkelerine çok benziyor - neden her şey onlar için çalışıyor, ama sizin için değil? )))))) - belki de hepsi aynı, ilk yaklaşım doğru değil miydi? veya teorik eğitim her iki pençede de topal mı?

Neden bir şeyin etkisiz olduğuna veya benim için çalışmadığına karar verdiniz? Profilime gidin ve her şeyin nasıl çalıştığını görün. Tam olarak her şey çalıştığı ve geliştiği için, çok iş parçacığı için acil bir ihtiyaç olduğunu varsayıyorum.

 
Vict :

En bariz olanı, onsuz kendim idare etmeme rağmen, özellikle gine için kritik olan ayrı bir arayüz iş parçacığıdır.

Not: Eğer öyleyse, çoklu kullanım için kampanya yapmıyorum.

Peki, Markette ürününüz yok. Şimdi MCL'ye kolayca bağlanan C # ile kolayca yapılabiliyorsa, GUI neden MCL'de yapılır? Ve bu GUI zaten başlangıçta kendi iş parçacığında çalışıyor.

 
Igor Makanu :

void OnTick ()
  {
   MqlTask obj1;
   MqlTask obj2;
   MqlTask obj3;
   MqlTask obj4;

   int takeprofit,stoploss,hstart= 0 ; 
   double lot,h[];

   bool success = false;

   CTask *task1 = obj1. CALLBACK_FUNC ( CopyClose (symbol,PeriodSecondary,hstart,HistoryCount,h));   //Выполняется асинхронно в пуле потоков
   success = task1 -> Run ();
   success = task1 -> Wait (0);  
   

   ENUM_CMD CMD1,CMD2,CMD3;
   CMD1 = ind1();
   CMD2 = ind2();
   CMD3 = ind3();

   if (NewBar())
     {
       CTask *task2   = obj2. CALLBACK_FUNC (DeleteOrdersLimits(Magic));  //Выполняется асинхронно в пуле потоков
      success = task2 -> Run ();
      success = task2 -> Wait (0);

       if (CMD1==CMD_BUY && CMD2==CMD_BUY && CMD3==CMD_BUY)
        {
         CTask *task3 = obj3. CALLBACK_FUNC (CalcTakeProfitStopLoss(takeprofit,stoploss));  //Выполняется асинхронно в пуле потоков
         success = task3 -> Run ();
         success = task3 -> Wait (0);

         lot=CalcLot(stoploss);
         if (ReversSignal)SELL_STOP_PR(Low[ 1 ],lot,Magic,stoploss,takeprofit); else BUY_STOP_PR(High[ 1 ],lot,Magic,stoploss,takeprofit);
        }
       if (CMD1==CMD_SELL && CMD2==CMD_SELL && CMD3==CMD_SELL)
        {
         CTask *task4 = obj4. CALLBACK_FUNC (CalcTakeProfitStopLoss(takeprofit,stoploss));  //Выполняется асинхронно в пуле потоков
         success = task4 -> Run ();
         success = task4 -> Wait (0);

         lot=CalcLot(stoploss);
         if (ReversSignal)BUY_STOP_PR(High[ 1 ],lot,Magic,stoploss,takeprofit); else SELL_STOP_PR(Low[ 1 ],lot,Magic,stoploss,takeprofit);
        }
     }

     delete task1;  //Очищаем ресурсы
     delete task2;
     delete task3;
     delete task4;
  }
//+------------------------------------------------------------------+


İşte açıklayıcı bir örnek, bir iş parçacığında doğrusal asenkron kodun örnek bir yazımı.
Mql'de EventLoop'un işlevselliğinin ThreadPool geliştiricileri tarafından düzenli olarak uygulanması ve uygulanması şartıyla.
Kullanıcının akışlara tırmanmasına gerek yok! Geliştiriciler uygun sınıflar yazarak buna dikkat etmelidir.
Program tek bir iş parçacığında çalışır ve iş parçacığı havuzunda normal engellemesiz geri aramalar yürütülür!
Şimdi basit geri arama işlevlerinizi hesaplama açısından ağır veya paralel işlevlerle değiştirin.
Mega uygun ve paralel her şey))



Dosyalar:
node.js.png  48 kb
Neden: