Yedelkin: Oh, Licht am Ende des Tunnels! Sie sollten den EventSetTimer() innerhalb von OnTimer() selbst aufrufen? Ich werde es auf jeden Fall ausprobieren, wenn ich am Terminal bin. Danke für die intelligente Lösung!
Ich habe diese Lösung schon die ganze Zeit gesehen.
Ich habe einfach noch nicht ausprobiert, wie man am besten
EventKillTimer() oder EventSetTimer(0); um den Timer zu beenden.
Millisekunden ist sehr erwünscht. Ich schließe mich den Wünschen an.
In Expert Advisor ist es jetzt gefährlich. Zum Beispiel kann die synchrone Funktion MessageBox() schnell eine Warteschlange bilden, wenn der Benutzer das Terminal verlässt (natürlich kann man sagen, dass der Timer vor solchen Funktionen deaktiviert werden kann).
Es ist nicht mehr möglich, auf Millisekunden zu gehen.
Wie viele Expert Advisors, die bereits geschrieben wurden, werden 1000 Mal mehr Timer-Ereignisse generieren als vom Autor beabsichtigt?
Nein, nein... Sie müssen es nicht auf diese Weise ändern . Sie müssen lediglich eine neue Funktion EventSetTimerMS(long ms) hinzufügen;
Aus Gründen der Kompatibilität ist es notwendig, die alte Version beizubehalten. (Es kann leicht emuliert werden , indem man EventSetTimerMS(1000); aufruft)
Dies ist jetzt im Expert Advisor gefährlich. Zum Beispiel kann die synchrone Funktion MessageBox() schnell eine Warteschlange bilden, wenn der Benutzer das Terminal verlässt (natürlich kann man sagen, dass der Timer vor solchen Funktionen deaktiviert werden kann).
Wenn sie doch nur die Unterbrechungsbearbeitung übernehmen würden...
Ich weiß nicht, was Sie meinen, aber vielleicht ist es ein gutes Beispiel... :)
Über Warteschlangen - Sekunden können auch verwendet werden, wenn Sie schlafen gehen. :) Verwenden Sie es nicht, wenn Sie nicht wissen, wie Sie die Folgen verarbeiten können - es ist ein einfaches und universelles Rezept.
......... Zum Beispiel kann die synchrone Funktion MessageBox() sich schnell in die Warteschlange einreihen, wenn der Benutzer das Terminal verlässt. (Natürlich kann man sagen, dass man den Timer vor solchen Funktionen deaktivieren kann) ........
Mit Millisekunden können Sie versuchen, die Zeit zwischen den Ticks zu messen. Wenn weniger als 500 ms vergehen, ist der Markt kurz davor, in Bewegung zu geraten.
Wie viele bereits geschriebene Experten werden 1000-mal mehr Timer-Ereignisse erzeugen als vom Autor beabsichtigt?
Nur eine Meinung: und wenn es die Möglichkeit gibt, Millisekunden für diejenigen hinzuzufügen, die es wünschen, und der Haken nur in alten EAs ist, warum dann nicht eine neue Funktion einführen
boolEventSetTimer(
int seconds, // количество секунд для OnTimerboolпереключатель=false// переключатель: false - период измеряется в секундах, true - в миллисекундах
);
Machen Sie alles mehrsekündig, und wenn der Schalter==false, multiplizieren Sie den Wert der Sekunden einmal mit 1000 (für alte EAs, zum Beispiel).
Dies ist jetzt im Expert Advisor gefährlich. Zum Beispiel kann die synchrone Funktion MessageBox() schnell eine Warteschlange bilden, wenn der Benutzer das Terminal verlässt (natürlich kann man sagen, dass der Timer vor solchen Funktionen deaktiviert werden kann).
Aber wenn sie die Unterbrechungsbearbeitung...
OnTimer, OnTick, OnTrade... Dies sind die Unterbrechungen.
OnTimer, OnTick, OnTrade... Das sind Unterbrechungen.
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.
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, Licht am Ende des Tunnels! Sie sollten den EventSetTimer() innerhalb von OnTimer() selbst aufrufen? Ich werde es auf jeden Fall ausprobieren, wenn ich am Terminal bin. Danke für die intelligente Lösung!
Ich habe diese Lösung schon die ganze Zeit gesehen.
Ich habe einfach noch nicht ausprobiert, wie man am besten
EventKillTimer() oder EventSetTimer(0); um den Timer zu beenden.
Millisekunden ist sehr erwünscht. Ich schließe mich den Wünschen an.
In Expert Advisor ist es jetzt gefährlich. Zum Beispiel kann die synchrone Funktion MessageBox() schnell eine Warteschlange bilden, wenn der Benutzer das Terminal verlässt (natürlich kann man sagen, dass der Timer vor solchen Funktionen deaktiviert werden kann).
Aber wenn sie die Unterbrechungsbearbeitung...
Es ist nicht mehr möglich, auf Millisekunden zu gehen.
Wie viele Expert Advisors, die bereits geschrieben wurden, werden 1000 Mal mehr Timer-Ereignisse generieren als vom Autor beabsichtigt?
Nein, nein... Sie müssen es nicht auf diese Weise ändern . Sie müssen lediglich eine neue Funktion EventSetTimerMS(long ms) hinzufügen;
Aus Gründen der Kompatibilität ist es notwendig, die alte Version beizubehalten. (Es kann leicht emuliert werden , indem man EventSetTimerMS(1000); aufruft)
Dies ist jetzt im Expert Advisor gefährlich. Zum Beispiel kann die synchrone Funktion MessageBox() schnell eine Warteschlange bilden, wenn der Benutzer das Terminal verlässt (natürlich kann man sagen, dass der Timer vor solchen Funktionen deaktiviert werden kann).
Wenn sie doch nur die Unterbrechungsbearbeitung übernehmen würden...
Ich weiß nicht, was Sie meinen, aber vielleicht ist es ein gutes Beispiel... :)
Über Warteschlangen - Sekunden können auch verwendet werden, wenn Sie schlafen gehen. :) Verwenden Sie es nicht, wenn Sie nicht wissen, wie Sie die Folgen verarbeiten können - es ist ein einfaches und universelles Rezept.
......... Zum Beispiel kann die synchrone Funktion MessageBox() sich schnell in die Warteschlange einreihen, wenn der Benutzer das Terminal verlässt. (Natürlich kann man sagen, dass man den Timer vor solchen Funktionen deaktivieren kann) ........
Wie viele bereits geschriebene Experten werden 1000-mal mehr Timer-Ereignisse erzeugen als vom Autor beabsichtigt?
Nur eine Meinung: und wenn es die Möglichkeit gibt, Millisekunden für diejenigen hinzuzufügen, die es wünschen, und der Haken nur in alten EAs ist, warum dann nicht eine neue Funktion einführen
Machen Sie alles mehrsekündig, und wenn der Schalter==false, multiplizieren Sie den Wert der Sekunden einmal mit 1000 (für alte EAs, zum Beispiel).
Dies ist jetzt im Expert Advisor gefährlich. Zum Beispiel kann die synchrone Funktion MessageBox() schnell eine Warteschlange bilden, wenn der Benutzer das Terminal verlässt (natürlich kann man sagen, dass der Timer vor solchen Funktionen deaktiviert werden kann).
Aber wenn sie die Unterbrechungsbearbeitung...
OnTimer, OnTick, OnTrade... Dies sind die Unterbrechungen.
OnTimer, OnTick, OnTrade... Das sind Unterbrechungen.
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.