Flujo de eventos. ¿Cómo controlar y hacer que el evento sea inactivo? (+ resuelto) - página 5

 
Yedelkin:

OK, ya veo.TheXpert hizo una ola y el problema comenzó.

Es una verdadera lástima para ti. ¿Es mi culpa que no puedas comunicarte con la gente?

El Asesor Experto tiene un consumo de memoria fijo, si

(1) no hay emulación del buffer

(2) no se dibujan objetos en la historia.

(3) no hay errores de asignación de memoria. Pero esto se suele ver con deinit.

(4) no hay errores al trabajar con los índices. Si un indicador tiene un búfer de tamaño completo, es un error.

Si hay (1) o (2) quema es fácil de rastrear con probador + despachador. Se trata de un control de tamaño.

Los eventos por sí mismos no consumen memoria en absoluto (en orden ascendente). Por lo tanto, si no hay ningún problema en el Asesor Experto, el problema está definitivamente en el indicador.

Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
TheXpert:

En un EA, el consumo de memoria es fijo si

(1) no hay emulación del buffer

(2) no hay dibujo de objetos en la historia.

(3) no hay errores de asignación de memoria. Pero esto se suele ver con la desinternación.

(4) no hay errores de trabajo con induladores. Si un indicador tiene un búfer de tamaño completo, es un error.

Si tiene (1) o (2), es fácil rastrear la sobrecarga con el probador y el despachador. Se puede tratar con control de tamaño.

Los eventos en sí no consumen nada de memoria (ascendente). Por lo tanto, si el Asesor Experto no tiene ningún problema, el problema está definitivamente en el Aislador.

Muchas gracias por una respuesta tan detallada. Lo pensaré. (1) - (3) definitivamente no.

Sobre (4) por favor explica: qué significa "si el indicador lleva el buffer al tamaño completo", para no perderme en conjeturas.

Acerca de "Si hay (1) o (2) quema es fácil de rastrear por el probador + gerente" pido para especificar: es decir, usted sugiere utilizar el probador no sólo para la medición de la velocidad del programa, sino también para la medición del volumen consumido? Sí, una solución tan sencilla que ni siquiera se me había ocurrido.

Además. Resulta que si un Asesor Experto se construye usando objetos dinámicos, no puede tener memoria fija. Por otro lado, no hay informes de funcionamiento incorrecto con objetos dinámicos; cuántas veces he borrado y lanzado el Asesor Experto...

De todos modos, mi lluvia de ideas me sugirió una idea trivial: si no puedo separar los volúmenes de los programas que se ejecutan juntos, tengo que ejecutarlos por separado y ver cómo aumenta su consumo. El Asesor Experto debe ser lanzado no desde su indicador personalizado, sino, supongamos, desde los ticks de su propio gráfico. Teniendo en cuenta su sugerencia sobre el probador que mide el volumen, todo parece estar bien. ¿Quizás eso es lo que quiso decir Roche al referirse al artículo...? Pero de todos modos, al releer el artículo no se me ocurrió tal pensamiento. ¡No sin una pista!

TheXpert :

Me vuelves loco. ¿También tengo la culpa de que no puedas comunicarte con la gente?

La culpa es la culpa, la ola es la culpa :)

Y ya he captado tu punto de vista sobre mi extrema mala educación y me he disculpado por adelantado :) Aun así, mi mala educación me dice que es más productivo hablar por mí mismo, que por la gente :) No estamos en la Duma del Estado :)

 
Yedelkin:

Sobre (4) por favor explique: qué significa "si el indicador tiene un búfer de tamaño completo" para no perderse en conjeturas.

Lo que quiero decir aquí es que si el gráfico tiene, digamos, 100000 barras y el Asesor Experto está tirando de un buffer para todas las 100000 barras - eso no es correcto.

Acerca de "Si hay (1) o (2) es fácil de rastrear la quema por el probador + despachador" pido que se especifique: es decir, usted propone utilizar probador no sólo para medir la velocidad del programa, sino también para medir el volumen consumido? Sí, una solución tan sencilla que ni siquiera se me había ocurrido.

Bueno... Te refieres a ejecutar el probador y en algún lugar (en el Administrador de Tareas de Windows, por ejemplo) supervisar la asignación de memoria. No es una forma muy fiable, pero si el problema está en EA, lo más probable es que la quema de memoria sea muy alta.

Así que la lluvia de ideas dio como resultado una idea aparentemente trivial: si no podemos dividir los volúmenes de los programas que se ejecutan juntos, tenemos que ejecutarlos por separado y ver quién tiene un mayor consumo.

Bueno, así es como se desarrolló en realidad...
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
sergeev:
...

Es decir, por ejemplo, cuando se hace clic en el objeto - evento CHARTEVENT_OBJECT_CLICK no vendrá inmediatamente, pero sólo después de la retirada de todos los eventos anteriores de la cola.
Y como comprenderás, la cola está bien rellena con el EventChartCustom.

...

Alex, ahora tengo un problema ligeramente similar. Es decir, justo después de la inicialización de EA todo funciona bien. Desde hace un tiempo no entro en el terminal, intento cambiar de un panel de información de usuario a otro y el programa se "paraliza". Incluso puede congelarse durante unos segundos hasta que se produzca el cambio. ¿Es el mismo caso?

Todavía no he probado tu solución, ocupado con otro asunto, pero definitivamente lo probaré, ya que yo mismo no he encontrado la solución. Por ahora hay una pregunta.

En su ejemplo hay cinco parámetros en la función OnChartEvent (). ¿Cuál es lavisión de la vida?

ulong event_idle=0; bool bidle;
//---
void OnChartEvent(int iview, int id, long lparam, double dparam, string sparam)
  {
    if(id==CHARTEVENT_CUSTOM+VM_IDLE)
      {
        if(event_idle>(ulong)lparam || bidle) // если последнее посланное больше чем пришедшее, то сразу выходим
          {
           bidle=event_idle > (ulong)lparam;
           //---
           if(bidle) return;
           //---
           event_idle=0;
          } 
        event_idle++;
        ChartRedraw(m_chart); // обновили чарт
        EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика
        return; 
      }
    EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика

    /*
        обработка остальных событий
    */
  }
 
tol64:

Alex, ahora tengo un problema ligeramente similar. Es decir, justo después de la inicialización de EA todo funciona bien. Desde hace un tiempo no entro en el terminal, intento cambiar de un panel de información de usuario a otro y el programa se "paraliza". Incluso puede congelarse durante unos segundos hasta que se produzca el cambio. ¿Es el mismo caso?

Sí, ese mismo. Tiene más de un EventChart enviado entre llamadas OnChartEvent. Haz el complemento que te sugerí para analizar el número de evento que entró y el problema desaparece.

Su ejemplo tiene cinco parámetros en la función OnChartEvent (). ¿Qué esiview?

Accidentalmente lo tengo en la cabecera de la función. Ignóralo.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 
No puedo creer la energía que tiene la gente). Eh, ¡dónde están mis 17 años!
 

tol64:

sergeev:
.
..

Así, por ejemplo, cuando se hace clic en un objeto, el evento CHARTEVENT_OBJECT_CLICK no vendrá de inmediato, sino sólo después de que todos los eventos anteriores se eliminen de la cola.
Y como comprenderás, la cola de eventos está atascada con EventChartCustom.

Amigos, vamos, lean el punto 1.1 de este post. La información discutida allí fue presentada hoy, podemos considerarla oficial. Bueno, ahora no puede haber (en este caso) tales fenómenos como eventos "anteriores" y "bloqueo sordo" de la cola por la función EventChartCustom. ...O necesitamos una refutación oficial de la nueva información del Manual.

TheXpert, gracias por la aclaración.

 
Yedelkin:

Amigos, vamos, lean el punto 1.1 de este post. La información discutida allí fue presentada hoy, podemos considerarla oficial. Pues no puede (en este caso) haber ahora en la cola tales fenómenos como eventos "anteriores" y "bloqueo sordo" de la cola por la función EventChartCustom. ...O se necesita una refutación oficial de la nueva información del Manual.

¿es esto como un circo en marcha?
 
sergeev:
¿Esto es una especie de circo?

Si lo ves como un circo, siéntete libre de borrarlo, o trata de responderlo por sus propios méritos.

 
¿y ya has hecho una nueva pregunta?
Razón de la queja: