Zeitschaltuhr - Seite 6

 
Yurich:
Eine Unterbrechung liegt vor, wenn OnTick ausgeführt wird und ein wichtigeres Ereignis, wie OnTimer, eingetroffen ist. OnTick wird angehalten, der OnTimer-Code wird ausgeführt, dann läuft OnTick wieder weiter.
Oh je. Das ist ein schrecklicher Traum.
 
pusheax:

OnTimer, OnTick, OnTrade... Das sind die Unterbrechungen.

Das habe ich auch zuerst gedacht. Aber es gibt Varianten. Wir können z.B. nicht einen OnTimer mit dem Wort interrupts kennzeichnen und wissen, dass er genau im Moment des Auftretens eines Ereignisses aufgerufen wird und die Verarbeitung aller anderen Ereignisse unterbricht (das MSDOS Single-Thread-Schema - Stack speichern, Interrupts behandeln, Stack wiederherstellen, Kontrolle weitergeben). Ein solches Schema könnte viele Probleme mit einfacheren Methoden lösen. Zum Beispiel sieht OnTick, das nach diesem Schema aufgerufen wird, recht nett aus. Hier gibt es einige Feinheiten - es müssen wiederholte Eingaben verarbeitet werden (z. B. zwei Ticks mit einer kleinen Lücke), aber im Allgemeinen ist das Problem lösbar.
 
TheXpert:
Verdammte Scheiße. Das ist ein schlechter Traum.
Eigentlich beschrieb Yurich Interrupt im klassischen Sinne, nicht OnTick, OnTimer Interrupt-Handling
 
Zum Beispiel, wenn jemand Sleep(100000) in der OnTick Handler; so jetztOnTimer, OnTrade haben kein Leben überhaupt?
 
TheXpert:
Schade. Ja, es ist ein beängstigender Traum.

Nein, es ist nicht beängstigend. Es gibt altbewährte Schemata, wie man den Knall vermeiden kann.

Aber es ist immer noch ein Traum. Ich glaube nicht, dass die Entwickler es tun werden, obwohl die Vorteile unbestreitbar sind.

Ich könnte z.B. Hintergrundberechnungen in OnTimer ausführen, mit einer geringen Häufigkeit (etwa einmal in 5 Sekunden) während der halben Timerperiode. Außerdem bräuchte man sich keine Gedanken über die Behandlung von Ticks zu machen, die die Hintergrundberechnung einfach unterbrechen und dann korrekt an ihren Platz zurückbringen könnten. Und jetzt ist es einfacher, sie in ein separates Diagramm zu stellen, als sie in demselben Thread, in dem die Ticks ticken, korrekt zu verarbeiten. Obwohl es genug Zeit für alle in einem Thread gäbe.

 
pusheax:
Wenn zum Beispiel jemand Sleep(100000); im OnTick-Handler einstellt, habenOnTimer und OnTrade dann überhaupt keine Lebensdauer?

Das Handelsereignis verbleibt in der Warteschlange und wird bearbeitet.

Verwechseln Sie nicht die Ereignisse Tick, Trade, Timer und ihre Handler OnTick, OnTrade, OnTimer

 
pusheax:
Zum Beispiel, wenn jemand Sleep(100000); in OnTick Handler setzt, was wirdOnTimer, OnTrade haben kein Leben überhaupt?
Im Moment ist es genau das. Aber Selbstmord ist keine schwierige Sache. Schlimmer ist es, wenn auf meinem Bildschirm eine Nachricht erscheint und ich in der Küche Tee trinke. Jürich hat ein gutes Argument.
 
stringo:
Eigentlich beschrieb Yurich einen Interrupt im klassischen Sinne, nicht die OnTick- oder OnTimer-Interrupt-Behandlung.

Ich verstehe, was er beschrieben hat.

Daten zu synchronisieren und den Zugriff in einer Single-Thread-Anwendung zu unterbrechen, ist der Gipfel der Idiotie.

 
MetaDriver:
So ist es im Moment. Aber Selbstmord ist nicht schwer. Schlimmer ist es, wenn eine Nachricht auf dem Bildschirm erscheint und ich in der Küche sitze und Tee trinke. Jürich hat ein gutes Argument.
Ah, jetzt verstehe ich es, das Timer-Ereignis selbst wird passieren, aber seine Behandlung OnTimer wird verzögert, bis OnTick abgeschlossen ist.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
pusheax:
So funktioniert es wahrscheinlich.
Wenn doch nur :)