Zeitschaltuhr - Seite 4

 

Um einen Bereich von OnTimer-Ereignissen von weniger als einer Sekunde zu haben.

Und um einige Prozesse in Millisekunden messen zu können.

Ich habe die Idee mit "...(int delay=0)" überhaupt nicht verstanden, deshalb habe ich es als Bullshit geschrieben.

 
Yedelkin:
Wie Sie verstanden haben, lautet mein Motto in diesem Fall: "Nieder mit allen Miesmachern, wenn man auf sie verzichten kann". Das Einzige, was Sie tun müssen, ist, die Verzögerung der Erzeugung des ersten Timer-Ereignisses auf der Terminalebene für die vom Benutzer gewählte Zeit zu ermöglichen. Ich will die Bedeutung Ihres Codes nicht schmälern, zumal ich ihn einfach nicht gesehen habe.

Wie wollen Sie die erste Verzögerung des Ereignisses durch den Timer organisieren?

Der gleiche Sekunden-Timer wird im Terminal gestartet, und zu einem bestimmten Zeitpunkt werden Timer-Ereignisse für den Expert Advisor erzeugt. Alles ist genau so, wie ich es bereits vorgeschlagen habe.

 
stringo:

Wie wollen Sie die erste Verzögerung des Ereignisses durch den Timer organisieren?

Derselbe zweite Timer würde im Terminal gestartet werden und zu einem bestimmten Zeitpunkt würden die Timer-Ereignisse für den Expert Advisor generiert werden. Alles ist genau so, wie ich es bereits vorgeschlagen habe.

So stelle ich mir das vor: Nachdem ich die Funktion EventSetTimer(14400, 7029) in OnInit() gefunden habe , aktiviert das Terminal den internen Timer und erzeugt das erste Timer-Ereignis genau 7029 Sekunden nach dem Programmstart (z. B. um 12-00 Uhr), wie vom Benutzer gewünscht. Weitere Timer-Ereignisse werden in Abständen von jeweils vier Stunden erzeugt. Ein Ereignis pro 4 Stunden, nicht 14400 Ereignisse, wobei 13399 Timer-Ereignisse für den Benutzer bedeutungslos sind.

Dieser Ansatz unterscheidet sich meiner Meinung nach grundlegend von dem, den Sie vorschlagen. Weil in meiner Variante der interne Sekunden-Timer (der 7029 Sekunden zählt) nur für eine begrenzte Zeit nach der Initialisierung des Expert Advisors arbeitet und seine Arbeit beendet, ohne die Ereignis-Warteschlange zu verstopfen. Ihre Variante bietet eine kontinuierliche Generierung von Ereignissen im Sekundentakt, von der ersten bis zur letzten Minute der Arbeit eines Experten, von denen nur jedes 14400ste Ereignis für einen Benutzer zumindest ein gewisses Gewicht hat.
 
pusheax:

Um einen Bereich von OnTimer-Ereignissen von weniger als einer Sekunde zu haben.

Und um einige Prozesse in Millisekunden messen zu können.

Der aktuelle Parameter"int seconds// number of seconds" definiert die Periodizität der Timer-Ereignisse, nicht die "Verzögerungen für OnTimer". Lernen Sie Rechnen. Was die Millisekunden betrifft, so sollten Sie zumindest die erste Seite des Themas lesen.

pusheax:

Ich habe die Idee mit "...(int delay=0)" überhaupt nicht verstanden und deshalb habe ich geschrieben, dass das Quatsch ist.


Ich verstehe. Es ist ein bisschen wie ein "Ich sag's nur, bevor du es merkst". Das ist OK, das kommt vor :) Wir alle wollen manchmal unsere Vorstellung von Schönheit mit anderen teilen.

 
Yedelkin:

Ich sehe das so: Nachdem ich die Funktion EventSetTimer(14400, 7029) in OnInit() gefunden habe , aktiviert das Terminal den internen zweiten Timer und erzeugt das erste Timer-Ereignis genau 7029 Sekunden nach dem Programmstart (z. B. um 12-00 Uhr), wie vom Benutzer gewünscht. Weitere Timer-Ereignisse werden in Abständen von jeweils vier Stunden erzeugt. Ein Ereignis pro 4 Stunden, nicht 14400 Ereignisse, wobei 13399 Timer-Ereignisse für den Benutzer bedeutungslos sind.

Dieser Ansatz unterscheidet sich meiner Meinung nach grundlegend von dem, was Sie vorgeschlagen haben. Denn in meiner Variante arbeitet der interne Sekunden-Timer (der 7029 Sekunden zählt) nur für eine begrenzte Zeit nach der Initialisierung von EA und hört dann auf zu arbeiten, ohne die Ereigniswarteschlange zu verstopfen. Ihre Variante bietet eine kontinuierliche Generierung von Ereignissen im Sekundentakt, von der ersten bis zur letzten Minute der Arbeit eines Experten, von denen nur jedes 14400ste Ereignis für einen Benutzer zumindest ein gewisses Gewicht hat.

Ok

In der Funktion OnInit den Timer EventSetTimer(7029) starten;

In der Funktion OnTimer wird beim ersten Eintreffen der vorherige Zeitgeber EventKillTimer() deaktiviert und ein neuer Zeitgeber EventSetTimer(1440) gestartet;

 
stringo:

Deaktivieren Sie in der Funktion OnTimer bei der ersten Ankunft den vorherigen Zeitgeber EventKillTimer() und starten Sie einen neuen Zeitgeber EventSetTimer(1440);

Wird es richtig funktionieren? Jemand sagte vor nicht allzu langer Zeit, dass die Funktion EventSetTimer im Wesentlichen für einen einmaligen Aufruf aus dem Init gedacht ist.
 
stringo:

Ok

In der Funktion OnInit den Timer EventSetTimer(7029) starten;

Deaktivieren Sie in der Funktion OnTimer beim ersten Aufruf den vorherigen Zeitgeber EventKillTimer() und starten Sie einen neuen Zeitgeber EventSetTimer(1440);

Oh, das Licht am Ende des Tunnels! EventSetTimer() innerhalb des OnTimer() selbst aufrufen? Ich werde es auf jeden Fall ausprobieren, wenn ich am Terminal bin. Danke für die intelligente Lösung!
 
TheXpert:
Wird es richtig funktionieren? Jemand sagte vor nicht allzu langer Zeit, dass die EventSetTimer-Funktion im Wesentlichen dazu gedacht ist, einmal von init aufgerufen zu werden.
Das habe ich. Dies ist eine gängige Anwendung. Was die Exoten keineswegs entwertet (wenn Sie Lust dazu haben).
 
stringo:

Ok

In der Funktion OnInit den Timer EventSetTimer(7029) starten;

Deaktivieren Sie in der Funktion OnTimer beim ersten Aufruf den vorherigen Zeitgeber EventKillTimer() und starten Sie einen neuen Zeitgeber EventSetTimer(1440);

So mache ich das schon seit Urzeiten, aber im Testgerät hat das eine Zeit lang nicht funktioniert. Im Prüfgerät auf Zähler umgeschaltet.

Aber das ist alles Lyrik. Millisekunden sind sehr begehrt. Ich schließe mich den Wünschen an.

Ich brauche 100 ms für die Zeitabtastung, aber ich habe jetzt einen solchen Drang und weiß nicht, was ich morgen brauche. Ich möchte keinen so hohen Schwellenwert für die Bitrate haben, 1000 ms sind zu viel. Millisekunden sind Standard. Wenn jemand dummerweise die Warteschlange überläuft - das ist seine Tragödie (es gibt immer viele sehr günstige Möglichkeiten, das Programm auch mit dem Terminal zum Absturz zu bringen). Irgendwann werden wir herausfinden, was wir tun können und was nicht :)

 

Es ist nicht mehr möglich, auf Millisekunden zu gehen.

Wie viele EAs, die bereits geschrieben wurden, erzeugen 1000 Mal mehr Timer-Ereignisse als vom Autor beabsichtigt?