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

 
Estimados usuarios del foro.

Para trabajar con múltiples hilos, primero hay que aprender la diferencia esencial entre asincronía, multihilo y ejecución multiproceso, porque ni siquiera se puede entender su lógica en algunos lugares. En primer lugar.

En segundo lugar, la llamada a la DLL externa sigue existiendo y ¿quién te impide implementar tu propia biblioteca con múltiples hilos y conectarla?

En tercer lugar, ¿para qué tareas se necesita el multithreading en mql?

Por no hablar del hecho de que todavía tiene que aprender los objetos de sincronización. ¿Lo necesitas? Si es así, es una tarea muy fácil escribir una dll para usted.
 
Roman:

¿Así que inicializar enDLL_PROCESS_ATTACH: será suficiente para llamar desde el programa mql?

Desde el programa mql para llamar a sus funciones ubicadas en la dll.

 
Dmitry Fedoseev:

Desde el programa mql para llamar a sus funciones ubicadas en la dll.

¿Y cuál es el problema de describir sus firmas? ¿No se tira de winapi de alguna manera a través de las firmas de los métodos?
 
Andrey Pogoreltsev:
¿Y cuál es el problema de describir sus firmas? ¿No se tira de winapi de alguna manera a través de las firmas de los métodos?

Lo siento, ¿por qué describirlos? Y lo siento, no he sacado nada))

 
Dmitry Fedoseev:

Lo siento, ¿por qué describirlos? Y lo siento, no he sacado nada))

Lo siento, ya pensé que lo preguntaba.
 
Andrey Pogoreltsev:
Estimados usuarios del foro.

Para trabajar con múltiples hilos, primero hay que aprender la diferencia esencial entre asincronía, multihilo y ejecución multiproceso, porque ni siquiera se puede entender su lógica en algunos lugares. Esa es una.

En segundo lugar, la llamada a la DLL externa sigue existiendo y ¿quién te impide implementar tu propia biblioteca con múltiples hilos y conectarla?

En tercer lugar, ¿para qué tareas necesitas el multithreading en mql?

Por no hablar del hecho de que todavía tiene que aprender los objetos de sincronización. ¿Lo necesitas? Si lo haces, es muy fácil que escribas una dll.

Andrey, creo que todo el mundo entiende que la asincronía y el multihilo son cosas diferentes.
Dado que la función CreateThread() está descrita en el inluder de la WinAPI, se suponía que se podían utilizar hilos.
No hay funciones similares a CreateTask() descritas en el IDE, por lo que la suposición de una posible escritura de código asíncrono desaparece por sí misma.
Por lo tanto, se hizo hincapié en los hilos. Sin embargo, resultó que las funciones descritas son sólo prototipos de WinAPI.
Repito, la tarea era utilizar la WinAPI pura y el prototipo descrito CreateThread() era engañoso. No se dice en ningún sitio que sean prototipos.
Todas las tareas son diferentes, así que llegué al método asíncrono y creo que es mejor escribir siempre de forma asíncrona o en hilos,
Y desarrollar el hábito de escribir siempre de forma asíncrona, le permitirá escribir programas rápidos, y elevar su nivel como especialista.
¡Es el principio básico de los propios desarrolladores, la velocidad de ejecución de los programas mql, es nuestro todo!

Es una pena que mql no disponga de esta función,
Hago una sugerencia a la administración de mql para que desarrolle funciones estándar de mql para la programación asíncrona,
ya que hay problemas de hilos y, sobre todo, de seguridad.
Para el modo asíncrono creo que no hay problemas de seguridad.

Ejemplo de lógica

Resuelve la implementación de EventLoop en mql.
crear la clase MqlTask
Declarar las tareas como objeto MqlTask obj;
crear tarea tarea = obj.CreateTask(MyFunc());
ejecutar con éxito = task -> Run();
pausa ejecución éxito = tarea -> SleepMs(ms);
esperar el éxito = tarea -> Esperar(ms);
esperar indefinidamente éxito = tarea -> Wait(0);
eliminar la tarea después de que se ejecute la tarea de eliminación;

y todo tipo de getStatuses para controlarlo.

 
Roman:

Andrey, creo que todo el mundo entiende que el modo asíncrono y el multihilo son cosas diferentes.
El inluder de la WinAPI contiene la función CreateThread() y habíamos asumido que se podían utilizar hilos.
Dado que no hay funciones similares a CreateTask() descritas en el IDE, no debemos considerar la posible escritura de código asíncrono.
Por lo tanto, se hizo hincapié en los hilos. Sin embargo, resultó que las funciones descritas son sólo prototipos de WinAPI.
Repito, la tarea era utilizar la WinAPI pura y el prototipo descrito CreateThread() era engañoso. No se dice en ningún sitio que sean prototipos.
Todas las tareas son diferentes, por lo que llegué a la asincronía. Creo que es mejor escribir siempre de forma asincrónica o en hilos,
Y un hábito desarrollado de escribir siempre de forma asíncrona, le permitirá escribir programas rápidos y elevar su nivel como especialista.
¡Es el principio básico de los propios desarrolladores, la velocidad de ejecución de los programas mql, es nuestro todo!
Lástima que no exista una función de este tipo en mql, así que haré una sugerencia al equipo de mql para que desarrollen una función estándar de mql
para la programación asíncrona, ya que hay problemas con los hilos y, sobre todo, de seguridad.
Creo que no hay obstáculos de seguridad para el modo asíncrono.
Elaborar la implementación de bucles y ejecutar tareas en estos bucles.

Decida si quiere ejecutar los métodos de forma asíncrona o multihilo. Trabajo con sockets, por ejemplo, de forma asíncrona desde mql.

Que se trata de firmas quedó claro de inmediato, ¿de qué implementaciones internas estamos hablando en un entorno de ejecución virtual seguro? ¿Y cómo te lo imaginas?

Y otra vez. Los que saben trabajar con hilos escribirán fácilmente una DLL para ello y harán todas las tareas allí.

Y sí, hay métodos asíncronos en mql, para crear las mismas órdenes y trabajar con red, si no me equivoco. ¿Qué otros métodos necesita hacer asíncronos? ¿Y cuál es la viabilidad de todos ellos?

¿Puedes darme algunos casos en los que la velocidad de un hilo no sea suficiente?
 
Andrey Pogoreltsev:
Decida si quiere ejecutar los métodos de forma asíncrona o multihilo. Yo, por ejemplo, trabajo con sockets de forma asíncrona desde mql.

Que se trata de firmas quedó claro de inmediato, ¿de qué implementaciones internas estamos hablando en un entorno de ejecución virtual seguro? ¿Y cómo se lo imagina?

Y otra vez. Los que saben trabajar con hilos escribirán fácilmente una DLL para ello y harán todas las tareas allí.

Y sí, mql tiene métodos asíncronos para crear las mismas órdenes y trabajar con red, si no me equivoco. ¿Qué otros métodos necesita hacer asíncronos? ¿Y cuál es la utilidad de todo esto?

¿Puedes darnos algunos casos en los que la velocidad no sea suficiente para trabajar en un hilo?

Para determinar lo que es posible utilizar en mql y lo que está prohibido.
CreateThread() se encuentra en los inludes, así que pensé que era posible trabajar con hilos.
Pero resultó que los hilos están prohibidos, así que la elección recae en async, pero tampoco está claro cómo usar async en mql.
Sí, ese es exactamente el problema de los enchufes. La ayuda dice que no se pueden crear más de 128 enchufes, lo que limita la obtención de información sobre acciones americanas, por ejemplo.
E incluso esos 128 sockets no está claro cómo convertirlos en modo asíncrono y evitar retrasos en el procesamiento de los datos entrantes.
Por eso tuve que buscar la solución al problema de otra manera,pero quería resolverlo en puro WinAPI, sin ninguna dll autoescrita.
Y como trabajar asincrónicamente en mql es interesante, si tienes algún ejemplo de trabajo, sería bueno comentarlo, si puedes comparte la información.
Pero los métodos asíncronos estándar en la ayuda de mql no los he visto.

 
Roman:

Para determinar lo que es posible utilizar en mql y lo que está prohibido.
Encontré CreateThread() en los inyectores del código, así que pensé que podría manejar hilos.
Pero resultó que los hilos están prohibidos, así que la elección recae en async, pero tampoco está claro cómo usar async en mql.
Sí, ese es exactamente el problema de los enchufes. La ayuda dice que no se pueden crear más de 128 enchufes, lo que limita la obtención de información sobre acciones americanas, por ejemplo.
E incluso esos 128 sockets no está claro cómo convertirlos en modo asíncrono y evitar retrasos en el procesamiento de los datos entrantes.
Por eso tuve que buscar la solución al problema de otra manera,pero quería resolverlo en puro WinAPI, sin ninguna dll autoescrita.
Y como trabajar asincrónicamente en mql es interesante, si tienes algún ejemplo de trabajo, sería bueno comentarlo, si puedes comparte la información.
Pero los métodos asíncronos estándar en la ayuda de mql no los he visto.

Si quieres trabajar de forma asíncrona con sockets a través de winapi, utiliza winsock2.

PruebeWSARecv y WSASend con OVERLAPPED y WSAEVENT.

Entonces espera...
 

Leo a los participantes inteligentes y me pregunto...

¿Qué sentido tienen todos estos trucos?

¿Cuándo en MQL sería tan terriblemente necesario el multihilo? Para mí, el único uso sería la prueba de estrategias, que se implementa de forma estándar.

Idealmente, podría tener sentido ejecutar varias WebRequests, pero no creo que el multi-threading sea necesario en absoluto.

¿Qué tareas requieren el multithreading en primer lugar?