Errori, bug, domande - pagina 2555

 
TheXpert:
aggiungere FILE_SHARE_READ per l'handle di scrittura e FILE_SHARE_WRITE per l'handle di lettura

Non funziona, solo individualmente se appeso al grafico. Usato:

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,';');
 
Влад:

Non funziona, solo individualmente se appeso al grafico. Usato:

Tutto risolto,usato:

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,';');
 
È sorta una nuova domanda. Nel primo grafico sto cambiando la variabile grazie all'indicatore di cui sopra. Nel secondo grafico, le informazioni vengono visualizzate solo quando il TF cambia, non istantaneamente come vorrei. Come può essere risolto? Il semplice aggiornamento del grafico premendo il PCM non aiuta.
 

la build 2135 è rotta a tutti

#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' - token inatteso, probabilmente manca il tipo? 1_mystd.mqh 75 1

'GENERATE_VECTOR' - variabile già definita 1_mystd.mqh 75 1

Compilato per secoli, si è rotto nella nuova build.

 
Vict:

La build 2135 è rotta.

È stato compilato per secoli, è rotto nella nuova build.

Imbroglio, va bene, uno degli aborti è stato chiamato in forma di
abort();

mangiava il compilatore, ma nella nuova build si è rifiutato, devono aver modificato qualcosa (beh, non credo di aver cancellato accidentalmente uno zero).

 
Ho notato che ME carica 2 core (26%) della CPU durante la compilazione, la domanda sorge spontanea - è il multithreading, allora perché non dovrebbero essere usati tutti i core per la compilazione o è un errore sotto forma di spreco di risorse?
 
Vict:
Imbroglio, va bene, uno degli aborti è stato chiamato in forma di

Il compilatore se lo mangiava, ma nella nuova build si è rifiutato, quindi devono aver modificato qualcosa (beh, non credo di aver cancellato per sbaglio uno zero).

A proposito dovremmo chiedere agli sviluppatori di introdurre un aborto a tempo pieno, asserire... Idealmente, naturalmente, ed eccezioni. Ma almeno inizia in piccolo.
 
Alexey Navoykov:
A proposito, dobbiamo chiedere agli sviluppatori di introdurre un aborto in linea, abortire ... e idealmente, naturalmente, le eccezioni. Ma almeno iniziate con uno piccolo.

Mettete una parola, se non mi sbaglio, l'ho chiesta nel mio ultimo ciclo MQL, sono passati 4 anni, ma ho dovuto ascoltare una baraonda di letterati, che dicevano che non ne avevano bisogno, bastava scrivere così... Se volete fermare l'esecuzione del programma con un errore critico di accesso ai dati OHLC o all'indicatore... Ho guardato attraverso metà di kodobase, sì, alcuni codificatori controllano queste condizioni, ma l'elaborazione è assente, il massimo che vedo è l'output nel log dell'esperto, come se fosse successo un problema, non preoccuparti, continuerò a lavorare con dati non validi su questa zecca )))

SZY: sono arrabbiato, ho bisogno di un modo semplice per fermare l'elaborazione del tick corrente! - interrompere il lavoro dell'esperto, è possibile, ma interrompere l'elaborazione di un tick, inventare e lavorare - ho il sospetto che a livello del compilatore abort() sia realizzato non più difficile di ExpertRemove() - che esiste già

ZZZY: il compito di scrivere un EA in MQL senza abort() in stile procedurale è più simile a un'invenzione che ad assemblare un codice da subroutine già pronte. Ho il sospetto che queste continue discussioni su come scrivere un indicatore che possa gestire correttamente la storia per un altro TF saranno anche più facilmente risolte usando abort() - non ho ancora deciso su questo argomento

 
Igor Makanu:

Mettete una buona parola, se non mi sbaglio, l'ho chiesto 4 anni fa nel mio ultimo ciclo MQL. bene, tutto è come al solito

Hai ragione, quando cominci a dirlo, le persone alfabetizzate usciranno da tutti i buchi, dicendo "questo non è C++").

avete bisogno di un modo semplice per interrompere l'elaborazione del tick corrente! - significa che è possibile interrompere il funzionamento dell'EA, ma per interrompere l'elaborazione di un tick bisogna inventarlo e risolverlo - sospetto che a livello di compilatore abort() possa essere implementato non più complicato di ExpertRemove() - che già esiste

Beh, sia abort che assert sono implementati nello stesso modo come nel codice sopra. Anche se è certamente brutto e a volte confuso, perché non sempre noto il messaggio precedente nel log. Forse c'è qualche altro errore, che restituirebbe qualcosa come "errore interno" nel log? Almeno non sarebbe così imbarazzante)

 
Alexey Navoykov:

Hai ragione, quando cominci a dirlo, le persone alfabetizzate usciranno da tutti i buchi, dicendo "questo non è C++").

Beh, sia abort che assert sono implementati nello stesso modo come nel codice sopra. Anche se è certamente brutto e a volte confuso, perché non sempre noto il messaggio precedente nel log. Forse c'è qualche altro errore, che restituirebbe qualcosa come "errore interno" nel log? Almeno non sarebbe così imbarazzante)

qui@Vict mi ha aiutato a fare un'eccezione con l'uscita al sistema operativo tramite la sostituzione di macrohttps://www.mql5.com/ru/forum/318246/page10#comment_12651045

, nel complesso una soluzione praticabile, ma... ma sembra brutto e disgustoso! )))