Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 100

 
Sleep ( 0 );

Böyle bir uyku onlarca milisaniye sürebilir.

 
fxsaber :

Böyle bir uyku onlarca milisaniye sürebilir.

bu ne demek?

Uzun zaman önce, süreç paralelleştirmesinde Sleep() 'ten bahsedildiğini hatırlıyorum.

 
Hızlı528 :

bu ne demek?

Tam olarak ne dedi.

 
fxsaber :

Böyle bir uyku onlarca milisaniye sürebilir.

Onlarca değil, 15.625 milisaniye.
İnşaatı uzun zamandır kullanıyorum:

 if (pause> 0 ) Sleep (pause);
 
Nikolay Semko :

Onlarca değil, 15.625 milisaniye.
İnşaatı uzun zamandır kullanıyorum:

 ulong GetSleepTime( const int Pause = 0 )
{
   const ulong StartTime = GetMicrosecondCount ();
  
   Sleep (Pause);
  
   return ( GetMicrosecondCount () - StartTime);
}

void OnStart ()
{
   ulong MaxTime = 0 ;
  
   while (! IsStopped ())
  {
     const ulong SleepTime = GetSleepTime();
    
     if (SleepTime > MaxTime)
    {
       Print (SleepTime);
      
      MaxTime = SleepTime;
    }
  }
}


Sonuç

 2542
9983
10033
10041
10148
10348
11982
26116
27529
40066
49915
56319
 
fxsaber :


Sonuç

Ortalama süreyi hesaplayın.

SleepTime'ı toplayın ve döngü bittikten sonra yineleme sayısına bölün.

Aksi takdirde, sunulan sonuç kırılgan zihinler için korkutucu görünüyor. Peki, aynı anda minimum süreyi göster.

not. MQL5'teki Sleep() işlevi , win api işlevi ::Sleep()'e bir yönlendirme değildir. Bunun yerine, değer 100'den küçükse bu bir yönlendirmedir. Ve 100'den fazlası, IsStopped'de kesintiye uğramanız için, içinde wine API slipi bulunan bir döngüdür.

Ve başka bir nüans var. Milisaniye sayısı <=0 olduğunda, 1 değiştirilir.Yani, asla ::Sleep(0) demeyiz.

PPS, Uyku işlevini kernel32.dll'den içe aktarır ve onunla aynı deneyi yapar

 
Slava :

Ortalama süreyi hesaplayın.

SleepTime'ı toplayın ve döngü bittikten sonra yineleme sayısına bölün.

Ortalama zamanla ilgili değil, patlama olasılığıyla ilgiliydi. İşlem geçmişinin OrderSend sonucuyla senkronizasyonunu beklerken bunlarla karşılaştım. Uyku (0) ile beklendi. Bunun mümkün olmadığı ortaya çıktı.

Slava :

not. MQL5'teki Sleep() işlevi , win api işlevi ::Sleep()'e bir yönlendirme değildir. Bunun yerine, değer 100'den küçükse bu bir yönlendirmedir. Ve 100'den fazlası, IsStopped'de kesintiye uğramanız için, içinde wine API slipi bulunan bir döngüdür.

Ve başka bir nüans var. Milisaniye sayısı <=0 olduğunda, 1 değiştirilir.Yani, asla ::Sleep(0) demeyiz.

Ayrıntılar için teşekkürler. Sleep(5000)'in IsStopped() yoluyla sonlandırılabileceğini bilmiyordum.

 
fxsaber :

Ortalama zamanla ilgili değil, patlama olasılığıyla ilgiliydi. İşlem geçmişinin OrderSend sonucuyla senkronizasyonunu beklerken bunlarla karşılaştım. Uyku (0) ile beklendi. Bunun mümkün olmadığı ortaya çıktı.

Dolayısıyla Windows işletim sistemi hiçbir zaman gerçek zamanlı bir sistem olmadı.
 

fxsaber :

Ayrıntılar için teşekkürler. Sleep(5000)'in IsStopped() yoluyla sonlandırılabileceğini bilmiyordum.

https://www.mql5.com/ru/docs/common/sleep

İşlev, her 0,1 saniyede bir uzman durdurma bayrağı durumunun yerleşik denetimine sahiptir.

Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды.
 
Slava :
Dolayısıyla Windows işletim sistemi hiçbir zaman gerçek zamanlı bir sistem olmadı.

Dürüst olmak gerekirse, bunun ne anlama geldiğini ve MQL5'te nerede karşılaşabileceğinizi bile bilmiyorum.