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

 
Vict:

Algo que no nos entendemos.

Pero no se complique: no creará un hilo a través de CriAtTrade() dentro de µl, tiene que pasar un puntero a una función (donde se iniciará el hilo), pero como se ha señalado anteriormente - kukush.

Haz tu propia DLL que cree el número correcto de hilos por sí misma.

Si quieres hacer cálculos complejos, entonces las llamadas puras de WinAPI no son suficientes.

Sí, hemos hecho un montón de prototipos de llamada WinAPI en casa, pero eso no significa que todos ellos pueden ser llamados limpiamente de MQL.

 
Igor Makanu:

nadie ha portado nada, lo que se ve en los endunnels son solo firmas de funciones

para crear un hilo, necesitas el cuerpo de la función - ¡es el cuerpo que se ejecutará en el hilo!

Para registrar un hilo en Windows hay que rellenar la estructura:

verlpStartAddress - esta es la dirección del punto de entrada de la función que se ejecutará en el hilo, no te preocupes por la asignación de memoria

para resolver este problema, es necesario encontrar una oportunidad para obtener la dirección de MyFunc() - en la memoria, y está ausente - bueno, en ninguna parte ... ¡ninguno!


No sé de qué otra manera explicar el problema... que no es la esencia ))))

Aquí hay una función portado en un inluder, con parámetros, ¿cuál es la diferencia?

HANDLE  CreateThread(PVOID thread_attributes, 
                     ulong stack_size, 
                     PVOID start_address, 
                     PVOID parameter, 
                     uint creation_flags, 
                     uint &thread_id);

Y aquí está la función portada, obteniendo la dirección de la función

PVOID  GetProcAddress(HANDLE module,
                      uchar &proc_name[]);
 

De hecho, no se puede llamar a CreateThread completamente desde MQL porque las direcciones físicas de las funciones no están disponibles.

Necesitas hacer tu propia DLL que proporcione manejadores reales.

 
MetaQuotes Software Corp.:

De hecho, no se puede llamar a CreateThread completamente desde MQL porque las direcciones físicas de las funciones no están disponibles.

Necesitas hacer tu propia DLL que proporcione manejadores reales.

Qué pena. Han portadoCreateThread(); yGetProcAddress();
Y
no se pueden obtener direcciones físicas de funciones, ¿cuál es el truco? ))
La seguridad es algo bueno pero, como ves, restringe el uso de la WinAPI estándar.
¿Por qué se han portado estas funciones y se han incluido en la biblioteca estándar de mql?
Engañar al usuario, si no puede utilizarlos))
Y sugieres escribir tu propia dll asíncrona, de la que quería deshacerme, usando la WinAPI estándar
Pero supongo que tendré que volver a escribir mi propia dll asíncrona.

p.d.
Aquí están las trampas de mql, para los que les gusta enviar todo el tiempo a google, no hay esta información por definición.

 
Roman:

Qué pena. Portaron en elCreateThread(); yGetProcAddress();
Y
no se puede obtener las direcciones físicas de las funciones, ¿cuál es el truco? ))
La seguridad es algo bueno pero, como ves, restringe el uso de la WinAPI estándar.
¿Por qué se han portado estas funciones y se han incluido en la biblioteca estándar de mql?
Engañar al usuario, si no puede utilizarlos))
Y sugieres escribir tu propia dll asíncrona, de la que quería deshacerme, usando la WinAPI estándar
Pero supongo que tendré que volver a escribir mi propia dll asíncrona.

p.d.
Aquí están las trampas de mql, para los que les gusta enviar todo el tiempo a google, no hay esta información por definición.

No hay que confundir la creación de prototipos de funciones WinAPi con la portación de funciones.

Hemos hecho un gran trabajo proporcionando prototipos de funciones WinAPI estándar, para que los desarrolladores no tengan que reinventar la rueda. Esto no es una biblioteca, sino descripciones.

Tener descripciones crudas de WinAPI no significa que ofrezcamos una garantía/oportunidad para las llamadas inseguras.

En un lenguaje de aplicación de este nivel, la seguridad es primordial.

 
Hmmm... Entonces surge otro problema.
¿Cómo entonces desde mql inicializar normalmente la dll a cargar y las funciones a exportar?

LoadLibraryW("MyDll.dll");
GetProccAddress(hMyDll, "MyFunc");
 
Roman:
Hmm... Entonces surge otro problema.
¿Cómo entonces desde mql se inicializa normalmente la dll cargable, y las funciones exportadas?

¡¿puedes leer? ¿puedes usar el motor de búsqueda? hay más de 20 artículos sobre cómo escribir DLLs en este recurso, algunos artículos están escritos de primera mano - por los administradores (desarrolladores), leer, hacer, todo está en libre acceso, - no hay más instrucciones detalladas sobre cómo escribir una DLL sin ningún conocimiento de los lenguajes de programación, pero sólo en este recurso! - ¡incluso con fotos!

¿qué quiere conseguir? - ¿prohibición por inundación?

Romano:

Pero supongo que tendré que volver a escribir mi dll asíncrono.

¿qué le impide escribir? ¿necesita sonidos de fanfarria? - Cualquiera que esté familiarizado con C++ básico o incluso más simple en C# - durante un día es capaz de encontrar esta información, escribir y comprobar en el código, aquí sólo se necesitan "ganas y asiduidad" - así escribió uno de los administradores, imho, es imposible elegir una expresión más precisa



SZS: No recuerdo un caso en el que un administrador haya escrito tantas respuestas a un usuario en una hora, algo ha cambiado, o los astros se alinearon así? )))))

 
Igor Makanu:

¡¿puedes leer? ¿puedes utilizar el motor de búsqueda? hay más de 20 artículos sobre cómo escribir DLLs en este recurso, algunos artículos están escritos de primera mano - por los administradores (desarrolladores), leer, hacer, todo está en libre acceso, - no hay más instrucciones detalladas sobre cómo escribir una DLL sin saber lenguajes de programación en absoluto, pero sólo en este recurso! - ¡incluso con fotos!

¿qué quiere conseguir? - ¿prohibición por inundación?

SZS: No recuerdo ningún caso en el que un administrador haya escrito tantas respuestas a un usuario en una hora, ¿ha cambiado algo? )))))

¡¡¡No hay ninguna descripción en estos artículos sobre la inicialización de la dll y las funciones !!!
Muéstrame donde se describe la inicialización de la librería dll y lasfunciones exportables, sólo te lo agradecería.
¡No hay que pensar que la gente no lee los artículos antes de referirse a un foro!

Igor Makanu:

¿qué te impide escribir? ¿necesitas fanfarria? - cualquiera que sepa c++ básico o incluso C# más sencillo puede buscar en Google esta información, escribirla y comprobarla en el código, todo lo que se necesita son "ganas y un culo torpe" - así escribió uno de los administradores, imho, la expresión no puede ser más precisa

¡Nada lo impide! La tarea consistía en utilizar la WinAPI pura. ¡Sin ningún tipo de dll autoescrito!
El tema fue creado para discutir el problema de la programación multihilo en mql, usted tiene algún tipo de actitud negativa hoy, ¿qué tipo de inundación en el tema creado por mí?
Por favor, absténgase de hacer este tipo de comentarios.

 
Roman:
Hm... Entonces surge otro problema.
¿Cómo entonces desde mql inicializar normalmente la dll a cargar y las funciones a exportar?

No es necesario que introduzcas estas funciones en mql. Crear procesos allí en la dll.

 
Dmitry Fedoseev:

No es necesario que introduzcas estas funciones en mql. Crear procesos allí en la dll.

Tu dll, inicialízala enDLL_PROCESS_ATTACH: ¿será suficiente para llamar desde el programa mql?
Pensé que era posible trabajar con las funciones WinAPI sin problemas, y la dll cerrada debe ser inicializada adicionalmente,
LoadLibraryW("MyDll.dll");

Razón de la queja: