Fehler, Irrtümer, Fragen - Seite 2555

 
TheXpert:
FILE_SHARE_READ für Schreib-Handle und FILE_SHARE_WRITE für Lese-Handle hinzufügen

Funktioniert nicht, nur einzeln, wenn man es an die Karte hängt. Gebraucht:

handle_write=FileOpen("checkbox_color.txt",FILE_WRITE|FILE_SHARE_READ|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
Влад:

Funktioniert nicht, nur einzeln, wenn man es an die Karte hängt. Gebraucht:

Alles gelöst.Gebraucht:

handle_write=FileOpen("checkbox_color.txt",FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
Eine neue Frage ist aufgetaucht. Im ersten Diagramm ändere ich die Variable mit Hilfe des oben genannten Indikators. Im zweiten Diagramm werden die Informationen nur angezeigt, wenn sich die TF ändert, nicht sofort, wie ich es gerne hätte. Wie kann das Problem gelöst werden? Das Aktualisieren der Karte durch Drücken von PCM hilft nicht.
 

Build 2135 ist überhaupt nicht in Ordnung

#define abort(ANY) do{printf("abort, file=%s,  line=%i", __FILE__, __LINE__); Alert(1/(uint)MathAbs(0));}while(false)

#define  GENERATE_VECTOR_GROWTH_FACTOR 2
#define  GENERATE_VECTOR(NAME, REF)                                         \
   template <typename T>                                                   \
   class NAME                                                              \
   {                                                                       \
      uint sz;                                                             \
   public:                                                                 \
      T a[];                                                               \
      NAME(): sz(0) {}                                                     \
      NAME(uint count): sz(0) {                                            \
         if (ArrayResize(this.a, count) == -1)                             \
            abort(0);                                                      \
         this.sz = count;                                                  \
      }                                                                    \
      uint size()const           {return this.sz;}                         \
      void clear()               {this.sz = 0;}                            \
      void push_back(T REF value) {                                        \
         if (this.sz == ArraySize(this.a)  &&                              \
             ArrayResize(this.a, this.sz*                                  \
                           GENERATE_VECTOR_GROWTH_FACTOR+1) == -1)         \
            abort(0);                                                      \
         this.a[this.sz++] = value;                                        \
      }                                                                    \
      void reserve(uint new_cap) {                                         \
         if ((int)new_cap > ArraySize(this.a))                             \
            ArrayResize(this.a, new_cap);                                  \
      }                                                                    \
      void erase(uint pos) {                                               \
         if ( ! ArrayRemove(this.a, (int)pos, 1) )                         \
            abort(0);                                                      \
         -- this.sz;                                                       \
      }                                                                    \
   };
#define  GENERATE_VECTOR_EMPTY
GENERATE_VECTOR(vector_fund, GENERATE_VECTOR_EMPTY);
GENERATE_VECTOR(vector_ref, const &);
#undef  GENERATE_VECTOR_EMPTY
#undef  GENERATE_VECTOR_GROWTH_FACTOR
#undef  GENERATE_VECTOR

'GENERATE_VECTOR' - unexpected token, probably type is missing?    1_mystd.mqh    74    1

GENERATE_VECTOR' - unerwartetes Token, wahrscheinlich fehlt der Typ? 1_mystd.mqh 75 1

'GENERATE_VECTOR' - Variable bereits definiert 1_mystd.mqh 75 1

Seit Ewigkeiten kompiliert, in der neuen Version kaputt.

 
Vict:

Build 2135 ist defekt.

Hundert Jahre lang wurde kompiliert, die neue Version ist kaputt.

Ich schummle, es ist in Ordnung, einer der Abbrüche wurde in Form von
abort();

frisst den Compiler, aber in der neuen Version weigert er sich, sie müssen etwas geändert haben (ich glaube nicht, dass ich versehentlich eine Null gelöscht habe).

 
Mir ist aufgefallen, dass ME beim Kompilieren 2 Kerne (26%) der CPU belastet. Es stellt sich die Frage, ob es sich um Multithreading handelt, denn warum werden dann nicht alle Kerne für die Kompilierung verwendet, oder ob es sich um einen Fehler in Form von verschwenderischer Nutzung von Ressourcen handelt.
 
Vict:
Ich schummle, es ist in Ordnung, einer der Abbrüche wurde in Form von

Der Compiler hat es früher verschlungen, aber in der neuen Version hat er sich geweigert, also müssen sie etwas geändert haben (ich glaube nicht, dass ich versehentlich eine Null gelöscht habe).

Übrigens sollten wir die Entwickler bitten, einen Vollzeit-Abbruch einzuführen, behaupten ... Idealerweise, natürlich, und Ausnahmen. Aber fangen Sie wenigstens klein an.
 
Alexey Navoykov:
By the way, müssen wir die Entwickler bitten, eine Inline-Abbruch, Abbruch einzuführen ... und im Idealfall, natürlich, Ausnahmen. Aber fangen Sie wenigstens mit etwas Kleinem an.

Wenn ich mich nicht irre, habe ich in meinem letzten MQL-Zyklus darum gebeten, das ist jetzt 4 Jahre her, aber ich musste mir ein Tohuwabohu von gebildeten Leuten anhören, die sagten, sie bräuchten es nicht, schreiben Sie es einfach so... Wenn Sie dieAusführung des Programms bei einem kritischen Fehler beim Zugriff auf OHLC-Daten oder Indikatoren stoppen möchten... ich habe die Hälfte von kodobase durchgesehen, ja, einige Codewriter überprüfen diese Bedingungen, aber die Verarbeitung ist nicht vorhanden, das Maximum, das ich sehe, ist die Ausgabe im Expertenprotokoll, als ob ein Problem aufgetreten wäre, keine Sorge, ich werde weiterhin mit ungültigen Daten an diesem Tick arbeiten )))

SZY: Ich bin sauer, ich brauche eine einfache Möglichkeit, die Verarbeitung des aktuellen Ticks zu stoppen! - die Arbeit des Experten zu stoppen, also ist es möglich, aber die Verarbeitung eines Ticks zu stoppen, zu erfinden und sich herauszuwinden - ich vermute, dass auf Compiler-Ebene abort() nicht schwieriger zu realisieren ist als ExpertRemove() - das bereits existiert

ZZZY: die Aufgabe, einen EA in MQL ohne abort() im prozeduralen Stil zu schreiben, gleicht eher einer Erfindung als dem Zusammenbau eines Codes aus vorgefertigten Unterprogrammen. Ich vermute, dass diese ständigen Diskussionen darüber, wie man einen Indikator schreibt, der die Historie für einen anderen TF korrekt verarbeiten kann, auch mit abort() einfacher zu lösen sind - ich habe mich zu diesem Thema noch nicht entschieden

 
Igor Makanu:

Wenn ich mich nicht irre, habe ich schon vor vier Jahren in meinem letzten MQL-Zyklus darum gebeten. Nun, alles ist wie immer

Sie haben Recht, wenn Sie das sagen, werden die gebildeten Leute aus allen Löchern kommen und sagen: "Das ist nicht C++").

Sie brauchen eine einfache Möglichkeit, die Verarbeitung des aktuellen Ticks zu beenden! - es bedeutet, dass es möglich ist, die Arbeit des EA zu stoppen, aber um die Verarbeitung eines Ticks zu stoppen, müssen Sie es erfinden und ausarbeiten - ich vermute, dass auf Compiler-Ebene abort() nicht komplizierter als ExpertRemove() implementiert werden kann - das existiert bereits

Nun, sowohl "abort" als auch "assert" sind auf dieselbe Weise implementiert wie im obigen Code. Allerdings ist es sicherlich hässlich und manchmal verwirrend, weil ich die vorangehende Meldung im Protokoll nicht immer bemerke. Vielleicht gibt es einen anderen Fehler, der etwas wie "interner Fehler" im Protokoll zurückgeben würde? Zumindest würde es nicht so peinlich aussehen)

 
Alexey Navoykov:

Sie haben Recht, wenn Sie das sagen, werden die gebildeten Leute aus allen Löchern kommen und sagen: "Das ist nicht C++").

Nun, sowohl "abort" als auch "assert" sind auf die gleiche Weise implementiert wie im obigen Code. Allerdings ist es sicherlich hässlich und manchmal verwirrend, weil ich die vorangehende Meldung im Protokoll nicht immer bemerke. Vielleicht gibt es einen anderen Fehler, der etwas wie "interner Fehler" im Protokoll zurückgeben würde? Zumindest würde es nicht so peinlich aussehen)

hier hat mir@Vict geholfen, eine Ausnahme mit Ausgang zum OS über Makro-Ersatz zu machenhttps://www.mql5.com/ru/forum/318246/page10#comment_12651045

insgesamt eine praktikable Lösung, aber... aber es sieht hässlich und eklig aus! )))