Programación asíncrona y multihilo en MQL - página 14

 
Реter Konow:

¿Es realmente tan peligroso? Errores en la liberación de la memoria...

El ejemplo se refiere a los principios generales de la captura del contexto del dispositivo y los recursos asignados en Windows, cuando se programan hilos independientes el desarrollador debe asegurarse de que el contexto del dispositivo y los recursos se liberan cuando lo requiere el sistema operativo, si el desarrollador utiliza comandos de bajo nivel debe liberar todos los recursos utilizados por sí mismo... aquí de nuevo al punto que escribí - escriba una vez usando la información googleada "Hello World"https://www.mql5.com/ru/forum/318593/page5#comment_12572558 y usted entenderá mucho, usted entenderá que el 99% del trabajo para usted fue hecho por los programadores del sistema

Es decir, trabajar en el entorno MQL - los programadores de Metakvot lo han hecho por ti - se han asegurado de que el terminal funcione en caso de que el programa MQL no funcione correctamente

 
Andrey Pogoreltsev:

Multithreading: las tareas se ejecutan en varios hilos. Puede ejecutarse en un solo procesador, pero con multihilos y cambiando entre ellos cuando se agotan las cuotas de tiempo del procesador. Requiere sincronización para acceder a los recursos compartidos. Puede dar lugar a bloqueos, condiciones de carrera, errores de liberación de memoria y otras "sorpresas".

Asíncrono: ejecución de funciones sin bloqueo (es decir, el control se devuelve inmediatamente después de la salida del método), normalmente en otros dispositivos (equipos de red, dispositivos de almacenamiento, periféricos, etc.). Por ejemplo, es posible escribir un servidor multiusuario de alto rendimiento utilizando sólo un hilo y conexiones de cliente de procesamiento de máquinas finales. Todo depende de la finalidad de este servidor.

En tu caso necesitas crear un gran número de conexiones usando WinAPI y puedes comprobar el estado de esas conexiones con WaitForMultipleObjects con un tiempo de espera, así no tienes que mantener un hilo de temporizador, por ejemplo.

P.D. En teoría, también se podría utilizar IOCompletionPort, pero requiere más conocimientos y un diseño cuidadoso.

Bueno... os habéis encontrado.

 
Quizá la gente no tenga suficientes vitaminas o micronutrientes...
 
Roman:

Gracias por la respuesta informativa ))
Adelante, explique qué hay y dónde.
¿Y cómo escribir código asíncrono conEventloop por medios estándar?

Todo está en la documentación.

Puedes empezar por leerlo e intentar escribir algo.

Y si no puedes, puedes preguntar en el foro.

Hasta ahora, no estamos hablando de nada.


 
Koldun Zloy:

Todo está en la documentación.

Puedes empezar por leerlo e intentar escribir algo.

Y si no puedes, puedes preguntar en el foro.

Hasta ahora, no estamos hablando de nada.


¿Para qué crees que se creó el tema?
Nos dices cómo escribir código asíncrono de forma habitual, y lo muestras en la documentación.
Además del envío de peticiones asíncronas, muestre dónde funciona Callback, dónde controla EventLoop, dónde Wait, etc.
Estoy seguro de que no podrá responder a eso porque no existe esa funcionalidad para los usuarios, y no está en los documentos.
Exactamente la conversación es sobre nada, la única persona aquí en el hilo esAndrey Pogoreltsev, que entiende el tema de la comunicación.

 
¡Euentloop! ¿Alguien tiene un Euentloop? ¡Un hombre no está bien aquí sin un Euentloop! ¡Que alguien me dé un Euentloop!
 

Roman, 2019.07.27 09:30

¿Para qué crees que se creó el tema?


Has preguntado por el multithreading. No hay ninguna.

Pero tampoco es eso lo que debe preocuparle ahora.

Roman, 2019.07.27 09:30

Nos dices cómo escribir código asíncrono utilizando los medios estándar y lo muestras en la documentación.
Además del envío de peticiones asíncronas, muéstranos donde funciona el Callback, donde se controla el EventLoop, donde se espera, etc.
Estoy seguro de que no puede dar una respuesta a eso porque no hay tal funcionalidad para los usuarios, y no está en los documentos.
Exactamente la conversación es sobre nada, la única persona aquí en el hilo es Andrey Pogoreltsev, que entiende el tema de la comunicación.

Puedo mostrárselo todo. ¿Pero qué sentido tiene?

Si lo necesitaras, lo encontrarías tú mismo.

Obviamente no has leído la documentación ni los artículos.
 
Koldun Zloy:

Has preguntado por el multithreading. No hay multihilo.

El multi-threading es comohttps://www.mql5.com/ru/docs/runtime/running , es decir, queremos paralelizar la tarea, abrir varios gráficos (desgraciadamente no he probado aún a utilizar las funciones de los Servicios - ¿quizás sea aún más fácil con ellos? ) y adjuntarles nuestros EAs que trabajan en hilos separados, para luego resolver el problema de sincronización e intercambio de datos (tareas)

Le pregunté a TS cinco veces - por qué el terminal de comercio lo necesita... no lo sabe, porque no hay una tarea o propósito específico

Lo veo en aplicaciones cliente-servidor que no son típicas del terminal de comercio, ¿quizás es conveniente que alguien envíe estadísticas al servidor? - Bueno, ya he escrito un ejemplo listo (artículo)https://www.mql5.com/ru/articles/5337

Las fuentes son legibles y el artículo tiene una calidad excelente; las fuentes pueden modificarse para realizar cálculos paralelos en varios hilos.... ¿ahora qué debemos calcular? )))

 
Igor Makanu:

El ejemplo se refiere a los principios generales de la captura del contexto del dispositivo y los recursos asignados en Windows, cuando se programan hilos independientes el desarrollador debe asegurarse de liberar el contexto del dispositivo y los recursos cuando lo requiera el sistema operativo, si el desarrollador utiliza comandos de bajo nivel debe liberar todos los recursos utilizados por sí mismo... aquí de nuevo al punto que escribí - escriba una vez usando la información googleada "Hello World" https://www.mql5.com/ru/forum/318593/page5#comment_12572558 y usted entenderá mucho, usted entenderá que el 99% del trabajo para usted fue hecho por los programadores del sistema

En otras palabras, trabajando en el entorno MQL los programadores de Metakvot lo hicieron por usted - aseguraron el funcionamiento estable del terminal con el trabajo inadecuado de los programas MQL

Vale, sin argumentos, convencido. Conseguir que los hilos sean correctos por sí solos puede no ser posible para los codificadores autodidactas y puede llevar a errores críticos. "Los partidos no son juguetes para los niños". Sin embargo, necesitamos alguna manera de lograr el multithreading dentro de un solo programa.

La lógica es sencilla: el lanzamiento secuencial de los servicios no provoca errores, y cada servicio se ejecuta en su hilo. Por lo tanto, el mecanismo ya está configurado y depurado. Bien. Tenemos que dar un paso adelante: escribir estos servicios en el código del Asesor Experto en módulos especiales. Cada módulo será el mismo servicio. A continuación, debemos compilar secuencialmente estos módulos y ejecutarlos simultáneamente. Eso es todo.

En esencia, nada cambia. Sólo los servicios se escribirán dentro del código del búho. Compilarían y funcionarían de la misma manera. Se borrarán cuando se elimine el EA del gráfico. De esta manera obtenemos un EA multihilo.

 
Puedes hacerlo aún más sencillo. El Asesor Experto carga los servicios necesarios por sí mismo, que se escriben por separado. Cuando se retira del gráfico, los detiene. Lo único que hay que hacer es añadir el inicio de los servicios del Asesor Experto. Y la interacción interna entre los hilos es tarea del programador. Se resuelve con la ayuda de recursos.
Razón de la queja: