Fehler, Irrtümer, Fragen - Seite 1509
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich kann nicht auf die Plattform zugreifen, die Website sagt, dass das Webterminal von diesem MetaTrader Server nicht unterstützt wird. Bitte kontaktieren Sie Ihren Broker, um den Server zu aktualisieren, die Plattform sagt, dass keine Verbindung besteht?
Liebe Entwickler, was ist die Reihenfolge der OnDeinit-Funktion - die Reihenfolge des Löschens von Objekten und anderen Variablen, des Löschens des Speichers, usw.?
OnDeinit ist eine gewöhnliche Funktion in MQL4/5, die in bestimmten Situationen aufgerufen wird. So programmieren Sie es, so wird es sein.
Bitte formulieren Sie Ihre Frage genauer. Woran genau sind Sie interessiert?
OnDeinit ist eine gewöhnliche Funktion in MQL4/5, die in bestimmten Situationen aufgerufen wird. So programmieren Sie es, so wird es sein.
Bitte formulieren Sie Ihre Frage genauer. Woran genau sind Sie interessiert?
Bei explizit gelöschten Objekten (die im zugewiesenen Speicher erstellt wurden) ist alles klar. Was mich interessiert, ist der Prozess der Freigabe von Speicher und das Löschen von Objekten, die im unbeaufsichtigten Speicher erstellt wurden.
D.h. es gibt z.B. zwei Objekte und eine Variable eines Grundtyps:
Ich bin daran interessiert, in welcher Reihenfolge der Speicher freigegeben und alle Objekte gelöscht werden, wenn das Programm gelöscht wird.
...
Wann kann das Terminal einfrieren? - Es scheint normale Situationen zu geben, in denen das Terminal hängen bleiben sollte.
Nach dem, was ich gesehen habe, hängt es immer (hängt für eine unbestimmte Zeit), wenn:
1. Verbindung zu einem Server herstellen.
2. P1: Beim Wechsel zwischen Konten.
3. Beim Starten des Terminals.
Beim letzten Mal hat sich das Terminal beim Starten aufgehängt. Ich habe mir den Task-Manager angesehen, das Terminal hat den Speicher Byte für Byte aufgefressen, nach ein paar Minuten war der gesamte 8Gb-Speicher aufgebraucht und das Betriebssystem hat sich zusammen mit dem Terminal aufgehängt. Ich musste die "Reset"-Taste an der Systemeinheit drücken.
Nach dem Neustart des Computers startete ich das Terminal - die Geschichte mit dem Einfrieren wiederholte sich, das System reagierte nicht mehr auf meine verzweifelten Versuche, es zusammen mit dem Terminal aufzuwecken.
Nach dem Neustart des Rechners habe ich alle Konfigurationsdateien des Terminals gelöscht, es gestartet - die Geschichte mit den Hängern geht weiter.
Nach dem Neustart des Computers löschte ich alle Verlaufsdateien des Handelsservers, und erst danach funktionierte der mobile Computer wieder normal, und das auch nur nach einer Bedenkzeit von etwa 3 Minuten.
Das Terminal bleibt von Build zu Build hängen. Win10x64.
Wann kann das Terminal auflegen? - Es scheint normale Situationen zu geben, in denen das Terminal hängen bleiben sollte.
Nach meinen Beobachtungen hängt sich das Terminal immer auf (hängt für unbestimmte Zeit), wenn:
1. Verbindung zu einem Server herstellen.
2. P1: Beim Wechsel zwischen Konten.
3. Beim Starten des Terminals.
Das letzte Mal, als ich dies tat, fror das Terminal beim Starten ein. Ich habe mir den Task-Manager angesehen, das Terminal hat den Speicher Byte für Byte aufgefressen, nach ein paar Minuten war der gesamte 8Gb-Speicher aufgebraucht und das Betriebssystem hat sich zusammen mit dem Terminal aufgehängt. Ich musste die "Reset"-Taste an der Systemeinheit drücken.
Nach dem Neustart des Computers startete ich das Terminal und die Geschichte mit den Hängern wiederholte sich, das System reagierte nicht mehr auf meine verzweifelten Versuche, es zusammen mit dem Terminal aufzuwecken.
Nach dem Neustart des Rechners habe ich alle Konfigurationsdateien des Terminals gelöscht, es gestartet - die Geschichte mit den Hängern geht weiter.
Nach dem Neustart des Computers löschte ich alle Verlaufsdateien des Handelsservers, und erst danach funktionierte der mobile Computer wieder normal, und das auch nur nach einer Bedenkzeit von etwa 3 Minuten.
Das Terminal bleibt von Build zu Build hängen. Win10x64.
Dies ist das erste Mal, dass ich auf diese Art von Code stoße, daher frage ich erfahrene Experten, wie man den Code in Teile aufteilt und Dateien korrekt einbindet
Hier ein Beispiel
D.h. eine Klasse erbt von einer anderen Klasse und hat eine Struktur; die Struktur im Beispiel habe ich abgekürzt, und dann gibt es Methoden, die mit einem Array der Struktur arbeiten
Ich habe 40-50 oder vielleicht mehr dieser Methoden.
Ich möchte jede Methode in die Include-Datei verschieben oder die Codestruktur auf eine andere Art und Weise gestalten, damit ich nicht 10 000-20 000 Codezeilen im Expert Advisor selbst erzeuge, die später nur schwer auffindbar sein werden.
Das Einzige, was ich im Moment sehe, ist das Senden eines Arrays der Struktur per Referenz
wie
Das scheint mir keine gute Wahl zu sein.
Was können wir tun?
Ich verstehe den Vorgang des Löschens explizit gelöschter Objekte (die im zugewiesenen Speicher erstellt wurden). Ich interessiere mich für den Prozess der Freigabe von Speicher und das Löschen von Objekten, die im automatischen Speicher erstellt wurden.
Ein Beispiel: Es gibt zwei Objekte und eine Variable eines Grundtyps:
Ich würde gerne wissen, in welcher Reihenfolge die Speicherfreigabe und das Löschen aller Objekte beim Löschen des Programms erfolgen soll.
OnDeinit hat damit nichts zu tun.
Haben Sie die Dokumentation gelesen?
Das Terminal wird nur von admin ausgeführt, und alle Meta-Editor-Dateien sind auch von admin, keine Probleme.
Dies ist das erste Mal, dass ich auf diese Art von Code stoße, daher frage ich erfahrene Experten, wie man den Code in Teile aufteilt und Dateien korrekt einbindet
Hier ein Beispiel
D.h. eine Klasse erbt von einer anderen Klasse und hat eine Struktur; die Struktur im Beispiel habe ich abgekürzt, und dann gibt es Methoden, die mit einem Array der Struktur arbeiten
Ich habe 40-50 oder vielleicht mehr dieser Methoden.
Ich möchte jede Methode in die Include-Datei verschieben oder die Codestruktur auf eine andere Art und Weise gestalten, damit ich nicht 10 000-20 000 Codezeilen im Expert Advisor selbst erzeuge, die später nur schwer auffindbar sein werden.
Das einzige, was ich im Moment sehen kann, ist das Senden eines Arrays von Strukturen per Referenz
wie
Ich glaube nicht, dass dies die beste Wahl ist.
Was kann ich tun?
Wenn Klassen sehr umfangreich sind, ist es besser, für jede Klasse ein separates Verzeichnis zu erstellen und in den Code, in dem die Objekte dieser Klasse verwendet werden, das Verzeichnis der Klasse durch #include einzubinden. Das Gleiche gilt für Strukturen und Funktionsbibliotheken. Wenn die Klassen und Strukturen nicht umfangreich sind, können Sie sie in einer Liste zusammenfassen. Sie können auch eine Liste mit allgemeinen Definitionen und Makros erstellen.
Und haben Sie keine Angst, dass Sie eine ganze Familie von Verzeichnissen zu einem Programm haben werden, das ist üblich, ich habe in meinen Handelssystemen 15-20 Verzeichnisse verwendet, plus Verzeichnisse mit .bmp und .gif für die Schnittstelle. Ich verteile alle Einträge in separaten Verzeichnissen. Es ist einfacher, bei der Fehlersuche und Aktualisierung zu navigieren.