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

 
Алексей Тарабанов:

Dos o veintidós hilos pueden ser síncronos o asíncronos. Un hilo puede incluir tanto operaciones síncronas como asíncronas. Usted ha indicado cómo. El paralelo no sabe cómo incluir los paralelos.

Pues sí. No se pueden incluir cálculos paralelos en un hilo. Las operaciones síncronas y asíncronas pueden realizarse en uno o varios hilos. Sólo que la asincronía de un solo hilo es esencialmente una secuencia optimizada de operaciones que es inferior en estabilidad a la asincronía de varios hilos. Si un hilo falla, el sistema seguirá funcionando y las operaciones del proceso detenido pueden disociarse en otros hilos preservando la capacidad de servicio. Si sólo hay un hilo, el sistema está kaput).

División aleatoria por cero en un hilo y ya está.
 

Ejemplo: hay una función sincrónica que se ejecuta en el hilo 1 y espera los datos de los hilos 2, 3 y 4, mientras que las funciones distribuidas en los hilos 5, 6, 7 y 8 están esperando los resultados.

Todos se ponen de pie y esperan el resultado. Ahora, atención: ¿qué pasa si la función sincrónica está esperando datos de su hilo? ¿Y, Dios no lo quiera, estos datos dependen de su resultado?

 
Реter Konow:

División aleatoria por cero en un hilo y ya está.

No, eso no es todo.

 
Алексей Тарабанов:

Ejemplo: hay una función sincrónica que se ejecuta en el hilo 1 y espera los datos de los hilos 2, 3 y 4, mientras que las funciones distribuidas en los hilos 5, 6, 7 y 8 están esperando los resultados.

Todos se ponen de pie y esperan el resultado. Ahora, atención: ¿qué pasa si la función sincrónica está esperando datos de su hilo? ¿Y Dios no quiera que estos datos dependan de su resultado?

Ok, yo mismo lo responderé:

El lienzo comenzará a parpadear.

 
Koldun Zloy:

Voy a traducir lo que ya le ha dicho un representante de la empresa de desarrollo de MT:

No se pueden crear hilos desde MQL. Ni siquiera con WinAPI.

Sólo puede hacerlo escribiendo su propia DLL.


Puedes, MQL5\Include\WinAPI\processthreadsapi.mqh tiene un wrapper
HANDLE CreateThread(PVOID thread_attributes,ulong stack_size,PVOID start_address,PVOID parameter,uint creation_flags,uint &thread_id);

Pero, ¿qué hacer con las pistas a través de MQL? Por eso escribieron que tenemos que crear una DLL y trabajar con ellos allí.


 

Alexei Tarabanov:

Ejemplo: hay una función sincrónica que se ejecuta en el hilo 1 y espera los datos de los hilos 2, 3 y 4, mientras que las funciones distribuidas en los hilos 5, 6, 7 y 8 están esperando los resultados.

Todos se ponen de pie y esperan el resultado. Ahora, atención: ¿qué pasa si la función sincrónica está esperando datos de su hilo? ¿Y Dios no quiera que estos datos dependan de su resultado?

Alexei Tarabanov:

Bien, yo mismo lo responderé:

El lienzo comenzará a parpadear.

Lo resaltado no tiene ningún significado.

Sobre las otras pistas, hasta que los datos estén listos, esperarán. Nada parpadeará.

Razón de la queja: