Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 100

 
Sleep(0);

Un tale slittamento può richiedere decine di millisecondi per essere completato.

 
fxsaber:

Un tale slittamento può durare decine di millisecondi.

Cosa significa?

Ricordo che molto tempo fa si parlava di Sleep() nei processi in parallelo

 
Fast528:

cosa significa?

Esattamente quello che ha detto.

 
fxsaber:

Un tale slittamento può durare decine di millisecondi.

Non decine, ma 15,625 millisecondi.
Ho usato la costruzione per molto tempo:

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

Non decine, ma 15,625 millisecondi.
Ho usato il design per molto tempo:

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;
    }
  }
}


Risultato

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


Risultato

Calcolare il tempo medio.

Accumula SleepTime e poi lo divide per il numero di iterazioni dopo la fine del ciclo.

Altrimenti, il risultato che hai appena presentato appare spaventoso alle menti immature. Mostra anche il tempo minimo allo stesso tempo.

PS. La funzione Sleep() in MQL5 non è un reindirizzamento alla funzione win api ::Sleep(). O meglio, se il valore è inferiore a 100 è un reindirizzamento. Ma sopra i 100 è un ciclo con win api slip al suo interno in modo che possa essere interrotto da IsStopped.

C'è un punto più sottile. Se i millisecondi <=0, aggiungiamo 1. Cioè, non chiamiamo mai ::Sleep(0).

PPS importa la funzione Sleep da kernel32.dll e fai lo stesso esperimento con essa

 
Slava:

Calcolare il tempo medio.

Accumulare SleepTime e dividere per il numero di iterazioni dopo che il ciclo è stato completato.

Non mi riferivo al tempo medio, ma alla possibilità di picchi. Li ho incontrati quando aspettavo che la cronologia degli scambi fosse sincronizzata con il risultato di OrderSend. Stavo aspettando usando Sleep(0). Si è rivelato impossibile.

Slava:

PS. La funzione Sleep() in MQL5 non è un reindirizzamento alla funzione win api ::Sleep(). Bene, se il valore è inferiore a 100, è un reindirizzamento. Ma sopra i 100 è un ciclo con win api slip al suo interno in modo che possa essere interrotto da IsStopped.

C'è un punto più sottile. Se i millisecondi <=0, aggiungiamo 1. Cioè, non chiamiamo mai ::Sleep(0).

Grazie per i dettagli. Non sapevo che Sleep(5000) può essere terminato attraverso IsStopped().

 
fxsaber:

Non si trattava del tempo medio, ma della possibilità di picchi. Li ho incontrati mentre aspettavo la sincronizzazione della storia del trading con il risultato di OrderSend. Stavo aspettando usando Sleep(0). Si è scoperto che non si può fare così.

Quindi il sistema operativo Windows non è mai stato un sistema in tempo reale
 

fxsaber:

Grazie per i dettagli. Non sapevo che Sleep(5000) potesse essere terminato tramite IsStopped().

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

La funzione ha un controllo incorporato dello stato del flag di stop dell'EA ogni 0,1 secondi.

Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды.
 
Slava:
Quindi il sistema operativo Windows non è mai stato un sistema in tempo reale

Onestamente, non so nemmeno cosa significhi o dove si possa incontrare in MQL5.

Motivazione: