Flujo de eventos. ¿Cómo controlar y hacer que el evento sea inactivo? (+ resuelto) - página 6
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Y ya has hecho una nueva pregunta?
No es apropiado que un moderador inicie una inundación. Para aclarar. Cuando un usuario (incluido un moderador) añade un nuevo mensaje a un hilo, es habitual llamarlo "respuesta". Aunque sea una réplica de carácter sarcástico.
Por lo tanto, una vez más, con una aclaración: si lo consideras un circo, siéntete libre de borrarlo, o intenta hacer un nuevo mensaje al respecto. Por otra parte, la información inexacta puede inducir a error a los usuarios.
Para añadir. Seré el primero en agradecerte si resulta oficialmente (si ayudas a averiguarlo) que los eventos de los usuarios llenan la cola según las antiguas reglas.
Yo añadiré. Seré el primero en agradecerte si resulta oficialmente (si ayudas a averiguarlo) que los eventos personalizados llenan la cola según las antiguas reglas.
A grandes rasgos, el manejo de los eventos nunca ha cambiado. Es que originalmente no estaba escrito correctamente en la ayuda.
...
Utilizo activamente el mensaje de inactividad creado en cada una de mis aplicaciones. Todo funciona.
Utilizo activamente el mensaje de inactividad creado en cada una de mis aplicaciones. Todo está funcionando.
sergeev:
He cogido un bicho.Sucede debido al envío del evento EventChartCustom del Asesor Experto a sí mismo. Resulta que este envío de evento provoca la actualización del gráfico (ChartRedraw) de la ventana principal.
//---
Hice tal experto para probar su solución y al mismo tiempo trató de resolver el problema con el parpadeo super frecuente de texto durante la edición de un objeto OBJ_EDIT.
//---
//---
Después de lanzar el Asesor Experto, verá lo siguiente en el gráfico en la esquina superior izquierda:
//---
Al hacer clic en el botón"START event_idle++" accederá a su solución(Alex). Vemos que el contador event_idle++ se incrementa justo en el gráfico.
Mientras el botón esté pulsado, tu código funcionará. Pero consume muchos recursos. La carga de la CPU (probada en doble núcleo) oscila entre el ~90% y el ~100%. La carga de la CPU oscila entre el ~5% y el ~10% antes del arranque o cuando se suelta el botón. Al hacer clic (con el botón izquierdo) en el gráfico, el contador se pone a cero.
La introducción de texto en el campo de entrada no causa parpadeo, porque en el momento de la entrada su código está desactivado por la variable global"On/Off event_idle++". Es una muleta, por supuesto, pero como solución temporal está bien para algunas soluciones simples.
La carga de la CPU no es el único problema. Cuando el contador está en marcha, las ventanas del terminal de operaciones se abren rápidamente, pero el cambio de tamaño de las ventanas se ralentiza bastante. No siempre, pero esos momentos existen.
La carga de la CPU no es el único problema. Cuando el contador está en marcha, las ventanas del terminal de operaciones se abren rápidamente, pero el cambio de tamaño de las ventanas se ralentiza bastante. No siempre, pero hay momentos así.
El problema de la carga de la CPU puede resolverse como sigue. Especifica que el contador de eventos se actualiza una vez por segundo. Añadimos el siguiente código:
En OnInit():
//---
En el cuerpo del programa:
//---
Al código de Alex(marcado en rojo):
//---
En el bloque manejador de eventosCHARTEVENT_CLICK(marcado en rojo):
//---
El bloque del manejador del evento CHARTEVENT_OBJECT_CLICK debe ser editado de la siguiente manera + El estado del botón debe ser revisado igualmente, porque a veces incluso presionándolo "erróneamente" lo dejará deprimido, si estaba así antes, pero el resto del código en el bloque funcionará y comenzará la confusión:
//---
Ahora se pone más interesante. :)
//---
P.D. Si tiene muchos segundos, puede intentar jugar con GetTickCount().
¿Qué puedo decir?
1. Es una carga para la CPU. Quítalo y se quedará quieto.
2. El bucle de inactividad en sí mismo no tiene un efecto notable en la CPU.
3. El problema del parpadeo del edith no es un problema con un solo gráfico 0. Es un problema con el envío de un evento al gráfico de objetos. Esto hace que el gráfico principal 0 se redibuje y dé parpadeos.
¿Qué puedo decir?
1. Es una carga para la CPU. Quítalo y se quedará tranquilo.
2. El bucle de inactividad en sí mismo no tiene un efecto notable en la CPU.
3. El problema del parpadeo del edith no es un problema de una sola carta 0. Es un problema de envío de un evento a la carta objeto. Esto hace que el gráfico principal 0 se redibuje y dé parpadeos.