Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 100

 
Sleep(0);

Ein solcher Ausrutscher kann Dutzende von Millisekunden in Anspruch nehmen.

 
fxsaber:

Ein solcher Ausrutscher kann Dutzende von Millisekunden dauern.

Was bedeutet das?

Ich erinnere mich, dass vor langer Zeit Sleep() bei der Parallelisierung von Prozessen erwähnt wurde

 
Fast528:

Was soll das bedeuten?

Genau das hat er gesagt.

 
fxsaber:

Ein solcher Ausrutscher kann Dutzende von Millisekunden dauern.

Nicht zehn, sondern 15,625 Millisekunden.
Ich benutze die Konstruktion schon seit langem:

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

Nicht zehn, sondern 15,625 Millisekunden.
Ich verwende das Design schon seit langem:

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


Ergebnis

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


Ergebnis

Berechnen Sie die durchschnittliche Zeit.

Akkumulieren Sie SleepTime und teilen Sie es dann durch die Anzahl der Iterationen nach dem Ende der Schleife.

Andernfalls sieht das Ergebnis, das Sie gerade präsentiert haben, für unreife Gemüter erschreckend aus. Gleichzeitig wird auch die Mindestzeit angezeigt.

PS. Die Funktion Sleep() in MQL5 ist keine Umleitung auf die Win-Api-Funktion ::Sleep(). Oder besser gesagt, wenn der Wert unter 100 liegt, handelt es sich um eine Weiterleitung. Aber über 100 ist es eine Schleife mit win api slip darin, so dass sie durch IsStopped unterbrochen werden kann.

Es gibt noch einen weiteren subtilen Punkt. Wenn Millisekunden <=0, wird 1 vorangestellt. Das heißt, wir rufen niemals ::Sleep(0) auf.

PPS importieren Sie die Sleep-Funktion aus kernel32.dll und führen Sie das gleiche Experiment mit ihr durch

 
Slawa:

Berechnen Sie die durchschnittliche Zeit.

Addieren Sie SleepTime und teilen Sie es durch die Anzahl der Iterationen, nachdem der Zyklus abgeschlossen ist.

Ich habe nicht von der Durchschnittszeit gesprochen, sondern von möglichen Spitzenwerten. Ich bin darauf gestoßen, als ich darauf wartete, dass der Handelsverlauf mit dem OrderSend-Ergebnis synchronisiert wird. Ich habe mit Sleep(0) gewartet. Dies erwies sich als unmöglich.

Slawa:

PS. Die Funktion Sleep() in MQL5 ist keine Umleitung auf die Win-Api-Funktion ::Sleep(). Nun, wenn der Wert unter 100 liegt, handelt es sich um eine Weiterleitung. Aber über 100 ist es eine Schleife mit win api slip darin, so dass sie durch IsStopped unterbrochen werden kann.

Es gibt noch einen weiteren subtilen Punkt. Wenn Millisekunden <=0, wird 1 vorangestellt. Das heißt, wir rufen niemals ::Sleep(0) auf.

Ich danke Ihnen für die Einzelheiten. Ich wusste nicht, dass Sleep(5000) durch IsStopped() abgebrochen werden kann.

 
fxsaber:

Es ging nicht um die Durchschnittszeit, sondern um die Möglichkeit von Spitzenwerten. Ich bin auf sie gestoßen, als ich auf die Synchronisierung der Handelshistorie mit dem OrderSend-Ergebnis wartete. Ich habe mit Sleep(0) gewartet. Es stellte sich heraus, dass dies so nicht möglich ist.

Das Windows-Betriebssystem war also noch nie ein Echtzeitsystem.
 

fxsaber:

Danke für die Details. Ich wusste nicht, dass Sleep(5000) über IsStopped() beendet werden kann.

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

Die Funktion prüft alle 0,1 Sekunden den Status des Stop-Flags des EA.

Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды.
 
Slawa:
Das Windows-Betriebssystem war also noch nie ein Echtzeitsystem.

Ehrlich gesagt, weiß ich nicht einmal, was es bedeutet oder wo man es in MQL5 finden kann.