Fehler, Irrtümer, Fragen - Seite 1509

 
Дмитрий Касаткин:
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?
Ihr Broker unterstützt kein Web-Terminal. Wenn das Terminal auf Ihrem Computer installiert ist und keine Verbindung besteht, sollten Sie den Port443 öffnen, wenn er zuvor geschlossen war.
 
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.
 
coderex:
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?

 
Slawa:

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:

class CFirst {...};
class CSecond {...};

int iVolume = 100;
CFirst first_obj;
CSecond *second_obj;

int OnInit(void) {
   second_obj = new CSecond();
// текст функции OnInit
}
void OnDeinit(const int reason) {
   if(CheckPointer(second_obj == POINTER_DYNAMIC)
      delete second_obj;
}

Ich bin daran interessiert, in welcher Reihenfolge der Speicher freigegeben und alle Objekte gelöscht werden, wenn das Programm gelöscht wird.

 
Slawa:

...

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.

 
Joo Zepper:

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.

Der gleiche Wind, Terminal läuft nur von admin, und alle Metaeditor-Dateien 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

class WL : public C_Object
  {
private:
   MqlTick           tick;
   struct STRUCT_SYMBOL // Структура символа
     {    
      bool              TRADING_IS_ALLOWED;      // Обновлять
      double            INDIKATOR_VOLUME;        // Обновлять
     };
   struct STRUCT_WATCH_LIST // Структура сохраненных листов
     {
      string            NAME_LIST;
     };
   STRUCT_WATCH_LIST WatchList[];
   STRUCT_SYMBOL     SymbolMass[];
}

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

func(STRUCT_SYMBOL & str)

Das scheint mir keine gute Wahl zu sein.

Was können wir tun?

 
coderex:

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?

 
Vladimir Pastushak:
Das Terminal wird nur von admin ausgeführt, und alle Meta-Editor-Dateien sind auch von admin, keine Probleme.
oder sollte das Terminal einen Hut mit einem Kreuz, einem goldenen Apfel und einem Stab erhalten und als heiligster König von ganz Russland bezeichnet werden?
 
Vladimir Pastushak:

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.

Grund der Beschwerde: