Init() und DeInit() Ausführungsreihenfolge - Seite 3

 
Aleksei Radchenko:


Versuchen Sie, das Terminal auf Version 1065 zu aktualisieren. Bei früheren Versionen trat ein Fehler bei der Neuinitialisierung auf, wenn der Zeitrahmen geändert wurde. Könnte helfen :)

https://www.mql5.com/ru/forum/187690


Ich habe Terminal 5.00 b1571
 
Sie können die Variablenwerte irgendwo speichern, z. B. in Globals. Nach der Neuübersetzung können Sie die Variablen lesen und wiederherstellen.
 
Andrey Dik:
Sie können die Variablenwerte irgendwo speichern, z. B. in Globals, und sie nach der Übersetzung auslesen und wiederherstellen.


Und dann wird Deinit sein Werk vollenden und alles verderben. Es macht keinen Sinn, ein reguläres Init und Deinit zu verwenden, wenn Sie Ihr eigenes Init und Deinit erstellen.

Dieses Problem ist auch bei mir aufgetreten. (

 
Sergey Chalyshev:


Und dann wird Deinit sein Werk vollenden und alles ruinieren. Es macht keinen Sinn, ein reguläres Init und Deinit zu verwenden, wenn Sie Ihr eigenes Init und Deinit erstellen.

Dieses Problem ist auch bei mir aufgetreten. (


Ich stimme voll und ganz zu (kein Sinn in regelmäßigen Init und Deinit)
 
Vasiliy Pushkaryov:


Versuchen Sie vielleicht, grafischen Objekten einen TF-Punkt als Teil ihres Namenspräfixes zuzuweisen,

und dann etwas wie dieses anwenden:


Danke für die Antwort

Ja, so etwas musste ich tun, aber das ist nur eine Teillösung.

Sie können dasselbe mit Variablen über eine Ressource oder Dateien tun, aber dies ist eine separate zusätzliche Ressource, die durch die Korrektur von MT5 hätte vermieden werden können

Überfrachtung des Codes mit unnötigen Nebenfunktionen, Prüfungen usw. (WITHOUT....)

 

Ich habe immer gedacht (vergeblich), dass ich bei einem Wechsel der TF zuerst die alte TF deinitiere und dann Init auf der neuen. Dies ist ein logischer Ablauf, auf den ich mich bei der Entwicklung von Expert Advisors und Indikatoren verlassen habe. Und nun stellt sich heraus, dass es sich um einen echten Unsinn mit Störungen der Ereignisfolge handelt...
Bei der Arbeit mit Diagrammen und grafischen Objekten fiel mir manchmal auf, dass etwas nicht stimmte, und ich musste mehrmals zwischen den TFs wechseln, um zu sehen, ob alles richtig angezeigt wurde.


Jetzt sind es die Codes, bei denen sich etwas in den deinites ändert und dann ändern sich auch die inites zurück... und es stellt sich heraus, dass die Reihenfolge umgekehrt ist!!! Das ist einfach eine schreckliche Logik. Wer hat sich das ausgedacht?

Das erste, was mir in den Sinn kommt, ist, dass in meinem Deinit der vorherige Zustand (gedrückte/freigegebene Tasten) in den globalen Variablen gespeichert wird und dann die Tasten entsprechend den gespeicherten Werten in den Inits gesetzt werden. Und es sind die Tasten, die sich nicht immer korrekt zurücksetzen lassen. Das ist das erste, woran ich mich erinnere, vielleicht finde ich ja noch etwas anderes... Ich werde mich morgen umsehen.


Vielen Dank an die Entwickler, sie haben sich viel Mühe gegeben...

 

In Deinit alle Daten in Globals schreiben. Setzen Sie eine der Globals als Semaphore überGlobalVariableSetOnCondition.

In Init write, wenn der Semaphorstatus "data dumped" ist, dann lesen und arbeiten, indem der Semaphor auf "read all" gesetzt wird.

Wenn die Semaphore "unverständlich" ist, warten wir einfach auf die Semaphore (entweder durch eine Schleife Sleep oder OnTimer).


Wenn es überhaupt keine Semaphore gibt, bedeutet das, dass wir zum ersten Mal starten und alles zählen und gleichzeitig eine Semaphore für die nicht zukünftige Änderung der TF erstellen.


Was ist so kompliziert an einer solchen Umsetzung? Einmal mit einer Bibliothek verschreiben und das war's.

 
fxsaber:

In Deinit alle Daten in Globals schreiben. Setzen Sie eine der Globals als Semaphore überGlobalVariableSetOnCondition.

In Init write, dass, wenn die Semaphore im "data dumped"-Status ist, wir lesen und arbeiten, indem wir die Semaphore auf "read all"-Status setzen.

Wenn die Semaphore "unlesbar" ist, warten wir einfach auf die Rückkehr der Semaphore (entweder über die Schleifen Sleep oder OnTimer).


Was ist so kompliziert an einer solchen Umsetzung? Einmal in der Bibliothek schreiben und das war's.

Ich wusste nicht, dass es ein solches Problem gibt. Ich hatte auf die Deinit-Init-Sequenz gehofft und nicht auf die umgekehrte. Wenn Sie die Probleme kennen, können Sie sie lösen. Aber es scheint mir, dass das Problem auf der Ebene der Terminallogik gelöst werden sollte und nicht mit Krücken, die man jetzt in jedes Programm einbauen muss...
 
elibrarius:
Ich wusste gar nicht, dass es ein solches Problem gibt. Ich hatte auf eine Deiniti-Init-Sequenz gehofft und nicht auf eine umgekehrte. Wenn man die Probleme kennt, kann man sie auch lösen. Aber es scheint mir, dass es auf der Ebene der Terminal-Logik gelöst werden sollte und nicht mit Krücken, die jetzt in jedes Programm eingefügt werden sollen...
Es ist keine Krücke, es ist eine einfache Lösung. Die Frage ist, wer sie umsetzt - Entwickler oder Benutzer. In beiden Fällen sollten Sie sich Zeit nehmen und den Text einmal schreiben. Wenn die Benutzer es können, haben sie es einfach geschrieben und machen sich nicht mehr die Mühe, die Frage zu diskutieren. Ich habe den Thread gerade selbst gelesen, und mir kam sofort eine Lösung in den Sinn. Was gibt es da zu erforschen? Man kann etwas lange verlangen oder es schnell selbst schreiben.
 
fxsaber:
Dies ist keine Krücke, sondern eine einfache Lösung. Die Frage ist nur, wer sie umsetzt - die Entwickler oder die Nutzer. In beiden Fällen müssen Sie Zeit investieren und den Text einmal schreiben. Wenn die Benutzer es können, haben wir es geschrieben und brauchen die Frage nicht mehr zu diskutieren. Ich habe den Thread gerade selbst gelesen, und mir kam sofort eine Lösung in den Sinn. Was gibt es da zu erforschen? Man kann etwas lange verlangen oder es schnell selbst schreiben.
Multipliziert man die Anzahl der kleinen Leute, die - jeder für sich, immer wieder - ein gemeinsames Problem lösen sollen, so übersteigt die verschwendete Arbeitszeit um ein Vielfaches (im Extremfall unendlich oft ;-)) die Zeit, die für jede Variante der Bearbeitung im Terminal selbst benötigt wird. Selbst das Vorhandensein einer hypothetischen Bibliothek garantiert nicht, dass jeder von ihrer Existenz weiß und sie nutzen muss. Im Allgemeinen ist nicht klar, warum eine solche "Harke" zu machen und zu verlassen?