Errores, fallos, preguntas - página 2555

 
TheXpert:
añadir FILE_SHARE_READ para el control de escritura y FILE_SHARE_WRITE para el control de lectura

No funciona, sólo individualmente si se cuelga en la carta. Usado:

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

No funciona, sólo individualmente si se cuelga en la carta. Usado:

Todo resuelto.Usado:

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,';');
 
Ha surgido una nueva cuestión. En el primer gráfico estoy cambiando la variable gracias a dicho indicador. En el segundo gráfico, la información sólo se muestra cuando el TF cambia, no instantáneamente como me gustaría. ¿Cómo se puede resolver? Actualizar el gráfico pulsando el PCM no sirve de nada.
 

build 2135 está roto en absoluto

#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 inesperado, probablemente falta el tipo... 1_mystd.mqh 75 1

'GENERATE_VECTOR' - variable ya definida 1_mystd.mqh 75 1

Compilado por años, se rompió en la nueva construcción.

 
Vict:

La compilación 2135 está rota.

Ha estado compilando durante años, se ha roto en la nueva construcción.

Engaño, está bien, uno de los abortos fue llamado en forma de
abort();

solía comerse el compilador, pero en la nueva build se negó, deben haber retocado algo (bueno no creo que haya borrado un cero accidentalmente).

 
Me he dado cuenta de que ME carga 2 núcleos (26%) de la CPU al compilar, la pregunta que surge es si se trata de multithreading, entonces por qué no se utilizan todos los núcleos para la compilación o es un error en forma de desperdicio de recursos.
 
Vict:
Engaño, está bien, uno de los abortos fue llamado en forma de

Antes el compilador se lo comía, pero en la nueva compilación se ha negado, así que deben haber retocado algo (bueno, es poco probable que haya borrado un cero por accidente).

Por cierto, deberíamos pedir a los desarrolladores que introduzcan un aborto a tiempo completo, assert... Lo ideal, por supuesto, y las excepciones. Pero, al menos, empieza con algo pequeño.
 
Alexey Navoykov:
Por cierto, hay que pedir a los desarrolladores que introduzcan un inline abort, abort... e idealmente, por supuesto, excepciones. Pero al menos empieza con algo pequeño.

Poner una palabra, si no me equivoco, lo pedí en mi último ciclo de MQL, hace 4 años, pero tuve que escuchar una algarabía de literatos, que decían que no lo necesitaban, que lo escribieran así... Si desea detenerla ejecución del programa con un error crítico de acceso a los datos o al indicador OHLC... He mirado la mitad de kodobase, sí, algunos codificadores comprueban estas condiciones, pero el procesamiento está ausente, lo máximo que veo es la salida en el registro de expertos, como si hubiera ocurrido un problema, no te preocupes, voy a seguir trabajando con datos no válidos en esta garrapata )))

SZY: ¡Estoy dolorido, necesito una forma sencilla de dejar de procesar el tic actual! - para detener el trabajo del experto, por lo que es posible, pero para detener el procesamiento de una garrapata, inventar y escurrirse - sospecho que a nivel de compilador abort() se realiza no más difícil que ExpertRemove() - que ya existe

ZZZY: la tarea de escribir un EA en MQL sin abort() en estilo procedimental se parece más a una invención que en el montaje de un código a partir de subrutinas ya hechas. Sospecho que estas constantes discusiones sobre cómo escribir un indicador que pueda manejar correctamente la historia para otro TF también serán más fáciles de resolver usando abort() - todavía no he decidido sobre este tema

 
Igor Makanu:

Habla bien, si no me equivoco, lo pedí hace 4 años en mi último ciclo de MQL. bueno, todo es como siempre

Tienes razón, cuando empieces a decir eso, esos literatos saldrán de todos los agujeros, diciendo "esto no es C++").

necesita una forma sencilla de dejar de procesar el tick actual. - significa que es posible detener el funcionamiento del EA, pero para detener el procesamiento de un tick hay que inventarlo y trabajarlo - sospecho que a nivel de compilador se puede implementar abort() no más complicado que ExpertRemove() - que ya existe

Bueno, tanto el abortado como el assert están implementados de la misma manera que en el código anterior. Aunque ciertamente es feo y a veces confuso, porque no siempre noto el mensaje precedente en el log. ¿Quizás haya algún otro error, que devuelva algo como "error interno" en el log? Al menos no se vería tan vergonzoso )

 
Alexey Navoykov:

Tienes razón, cuando empieces a decir eso, esos literatos saldrán de todos los agujeros, diciendo "esto no es C++").

Bueno, tanto el abortado como el assert están implementados de la misma manera que en el código anterior. Aunque ciertamente es feo y a veces confuso, porque no siempre noto el mensaje precedente en el log. ¿Quizás haya algún otro error, que devuelva algo como "error interno" en el log? Al menos no se vería tan vergonzoso )

aquí@Vict me ayudó a hacer una excepción con salida al SO a través de la macro sustituciónhttps://www.mql5.com/ru/forum/318246/page10#comment_12651045

En general, es una solución viable, pero... ¡pero se ve feo y desagradable! )))

Razón de la queja: