Errores, fallos, preguntas - página 1509

 
Дмитрий Касаткин:
No puedo acceder a la plataforma, el sitio web dice que la terminal web no es compatible con este servidor MetaTrader. Por favor, póngase en contacto con su corredor para actualizar el servidor, la plataforma dice que no hay conexión?
Su corredor no soporta el terminal web. Si el terminal está instalado en su ordenador y no hay conexión, debe abrir el puerto443 si antes estaba cerrado.
 
Estimados desarrolladores, ¿cuál es el orden de la función OnDeinit - el orden de borrado de objetos y otras variables, limpieza de memoria, etc.
 
coderex:
Estimados desarrolladores, ¿cuál es el orden de la operación de la función OnDeinit - el orden de borrado de objetos y otras variables, limpieza de memoria, etc.?

OnDeinit es una función ordinaria en MQL4/5 que se llama en ciertas situaciones. Así es como se programa, así será.

Por favor, sea más específico en su pregunta. ¿Qué le interesa exactamente?

 
Slawa:

OnDeinit es una función ordinaria en MQL4/5 que se llama en ciertas situaciones. Así es como se programa, así será.

Por favor, sea más específico en su pregunta. ¿Qué le interesa exactamente?

Con los objetos que se eliminan explícitamente (creados en la memoria asignada), todo está claro. Lo que me interesa es el proceso de liberación de memoria y el borrado de los objetos creados en la memoria desatendida.

Es decir, hay, por ejemplo, dos objetos y una variable de tipo fundamental:

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;
}

Me interesa saber cuál será el orden de liberación de la memoria y de borrado de todos los objetos, cuando se borre el programa.

 
Slawa:

...

¿Cuándo se puede congelar el terminal? - Parece que hay situaciones normales en las que se supone que el terminal se cuelga.

Por lo que he visto, siempre se cuelga (se cuelga durante un tiempo indefinido) cuando:

1. Conectarse a un servidor.

2. P1. Al cambiar de cuenta.

3. Mientras se inicia el terminal.

La última vez que hice esto, el terminal se congeló al iniciarse. He mirado en el administrador de tareas, el terminal se comía la memoria byte a byte, después de un par de minutos se comía todos los 8Gb de memoria y el sistema operativo se colgaba junto con el terminal. Tuve que pulsar el botón de "reset" en la unidad del sistema.

Después de reiniciar el ordenador inicié el terminal y se repite la historia con los cuelgues, el sistema dejó de responder a mis frenéticos intentos de despertarlo junto con el terminal.

Después de reiniciar el ordenador he borrado todos los archivos de configuración del terminal, lo he lanzado - historia con cuelga de nuevo.

Después de reiniciar el ordenador, borré todos los archivos del historial del servidor de comercio y sólo después de eso el ordenador móvil empezó a funcionar normalmente, y sólo después de pensarlo durante unos 3 minutos.

El terminal se cuelga de una construcción a otra. Win10x64.

 
Joo Zepper:

¿Cuándo puede colgar el terminal? - Parece que hay situaciones normales en las que se supone que el terminal se cuelga.

Según mis observaciones, el terminal siempre se cuelga (se cuelga durante un periodo de tiempo indefinido) cuando:

1. Conectarse a un servidor.

2. P1. Al cambiar de cuenta.

3. Mientras se inicia el terminal.

La última vez que hice esto, el terminal se colgó al iniciar. He mirado en el administrador de tareas, el terminal se comía la memoria byte a byte, después de un par de minutos se comía todos los 8Gb de memoria y el sistema operativo se colgaba junto con el terminal. Tuve que pulsar el botón de "reset" en la unidad del sistema.

Después de reiniciar el ordenador inicié el terminal y se repite la historia con los cuelgues, el sistema dejó de responder a mis frenéticos intentos de despertarlo junto con el terminal.

Después de reiniciar el ordenador he borrado todos los archivos de configuración del terminal, lo he lanzado - historia con cuelga de nuevo.

Después de reiniciar el ordenador, borré todos los archivos del historial del servidor de comercio y sólo después de eso el ordenador móvil empezó a funcionar normalmente, y sólo después de pensarlo durante unos 3 minutos.

El terminal se cuelga de una construcción a otra. Win10x64.

El mismo viento, el terminal se ejecuta sólo desde el administrador, y todos los archivos metaeditor también desde el administrador, sin problemas.
 

Es la primera vez que me encuentro con este tipo de código, por lo que pregunto a los expertos con experiencia cómo dividir el código en partes e incluir los archivos correctamente

He aquí un ejemplo

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[];
}

Es decir, una clase hereda de otra clase y tiene una estructura; la estructura en el ejemplo, la he abreviado, y luego hay métodos de trabajo con un array de la estructura

Tengo 40-50 o quizás más de estos métodos.

Me gustaría mover cada método al archivo de inclusión o arreglar la estructura del código de alguna otra manera, para no crear 10 000-20 000 líneas de código en el propio Asesor Experto que serán difíciles de buscar más tarde.

Lo único que veo de momento es enviar un array de la estructura por referencia

como

func(STRUCT_SYMBOL & str)

Me parece que no es una buena opción.

¿Qué podemos hacer?

 
coderex:

Entiendo el proceso de borrar objetos explícitamente eliminados (creados en la memoria asignada). Me interesa el proceso de liberación de memoria y de eliminación de objetos creados en la memoria automática.

Por ejemplo, hay dos objetos y una variable de tipo fundamental:

Me gustaría saber qué orden de desasignación de memoria y de borrado de todos los objetos seguirá al borrar el programa.

OnDeinit no tiene nada que ver con esto.

¿Has leído la documentación?

 
Vladimir Pastushak:
El terminal se ejecuta sólo desde admin, y todos los archivos del meta-editor son también desde admin, sin problemas.
de la administración? o ¿quizás el terminal debería recibir un sombrero con una cruz, una manzana de oro y un bastón, y llamarse el santísimo rey de toda Rusia?
 
Vladimir Pastushak:

Es la primera vez que me encuentro con este tipo de código, por lo que pregunto a los expertos con experiencia cómo dividir el código en partes e incluir los archivos correctamente

He aquí un ejemplo

Es decir, una clase hereda de otra clase y tiene una estructura; la estructura en el ejemplo, la he abreviado, y luego hay métodos de trabajo con un array de la estructura

Tengo 40-50 o quizás más de estos métodos.

Me gustaría mover cada método al archivo de inclusión o arreglar la estructura del código de alguna otra manera, para no crear 10 000-20 000 líneas de código en el propio Asesor Experto que serán difíciles de buscar más tarde.

Lo único que veo de momento es enviar un array de estructura por referencia

como

No creo que sea la mejor opción.

¿Qué puedo hacer?

Si las clases son de gran capacidad, es mejor crear un listado separado para cada clase y en el código donde se utilizan los objetos de esta clase, incluir el listado de la clase a través de #include. Lo mismo ocurre con las estructuras y las bibliotecas de funciones. Si las clases y estructuras no tienen capacidad, puede incluirlas en un solo listado. También puede crear un listado de definiciones y macros comunes.

Y no tengas miedo de que tengas toda una familia de listados relacionados con un programa, es común, yo en mis sistemas de comercio he usado 15-20 listados, además de directorios con .bmp y .gif para la interfaz. Distribuyo todos los listados en directorios separados. Es más fácil navegar cuando se detectan errores y se actualiza.

Razón de la queja: