Contaminación de memoria MT4 DLL
Contaminación de memoria MT4 DLL

 

Publi

Página 1 de 355 123 ... ??ltimo??ltimo
Resultados 1 al 10 de 41

Tema: Contaminación de memoria MT4 DLL

  1. #1
    Hola chicos,

    Estoy teniendo un intermitente (me encantan esos) con un EA y un archivo DLL que he escrito. El EA se ejecuta en 5 pares diferentes, pero la información que se pasa a la DLL es esencialmente la misma que todos los diferentes valores reales.

    El problema que tengo es que los datos de un par están siendo recogidos por el EA en otro par. Por ejemplo, envío datos de EA para calcular el LotSize correcto, si se ejecutan individualmente, entonces funcionan bien, a veces cuando los ejecuto todos juntos, todos terminan con el mismo tamaño de lote.

    Leí en algún lugar aquí que cuando accedo a una única DLL como esta desde múltiples gráficos, en realidad está compartiendo el mismo espacio de memoria, que fue la conclusión a la que llegué, que es casi aleatorio en cuanto a cuál escribe los datos que necesito en la matriz para ser recogido por el DLL. Oh en ese punto estoy usando punteros. Aquí está la declaración de DLL:

    #import xxx.dll
    bool f1 (string arr1 [10], double arr2 [40], double rates1 [2000] [6], double rates2 [2000] [6]);
    doble f2 (cadena arr1 [10], doble arr2 [40], dobles tasas1 [2000] [6], dobles tasas2 [2000] [6]);

    ¿Tengo razón en mi idea de cuál es el problema? Si es así, ¿hay alguna solución razonable que no sea duplicar la DLL para cada par?

    gracias por adelantado

  2.                         
    Publicidad
  3. #2

    Cita Iniciado por ;
    No guarde los punteros en la dll en absoluto. Conviértalos en enteros de 32 bits, guárdelos en el EA, trátelos como manejadores de recursos de algún tipo, y páselos como parámetros a las funciones de envoltorio en la dll (que luego los devolverá, los eliminará y los llamará al método real). de la instancia de objeto). Estoy haciendo esto en mi enlace de Python. Todos los objetos de Python en python26.dll son en realidad punteros, pero puedo tratarlos fácilmente como enteros para ser usados ??????por el código mql. Todas mis funciones de envoltorio de la API de Python que necesitan un puntero a un objeto de Python ...

  4. #3
    Cita Iniciado por ;
    o Lázaro
    Yo uso Delphi 2009. ¿Qué tal ustedes? He estado desarrollando en Delphi desde 1998 (versión 3), comencé a escribir MT4 EA en 2005 y combiné las dos el año pasado. El uso de DLL con MT4 surgió en parte de la necesidad de mis clientes de proteger su lógica y usar las licencias de cliente-servidor, pero las funciones de codificación adicionales no afectaron
    .

  5. #4
    Cita Iniciado por ;
    Ha sido mi experiencia (¡función no documentada!), Y el sentido común respaldaría esto: que tanto las funciones Init () como DeInit () en un EA se ejecutan dentro del subproceso principal de aplicaciones MT4. Por lo tanto, su implementación InitDeInit no necesita ser segura para subprocesos. Solo la función Inicio () se ejecuta en otro hilo. Siempre y cuando no llame a Init () o DeInit () desde su Función de Inicio () de MT4, todo estará bien, y puede usar una lista T simple para este fin.
    .

  6. #5
    Cita Iniciado por ;
    Holy Crap otro codificador de Delphi
    o Lázaro

  7. #6
    Cita Iniciado por ;
    Esto es algo que simplemente optimicé lejos al considerar que mis EA se ejecutan para siempre

  8. #7
    Cita Iniciado por ;
    Por favor, tenga en cuenta que estaba aferrado a la falta de información, tratando de pensar por qué su DLL aún estaba fallando ...
    Holy Crap otro codificador de Delphi

  9. #8

  10. #9

    Cita Iniciado por ;
    ¿Es posible adjuntar un controlador de eventos a la función TSimpleIPCClient.ServerRunning?
    No he usado TSimpleIPCClient todavía. AFAIK se implementa con canalizaciones con nombre y no conozco ningún mecanismo para activar un evento cuando se crea la tubería, pero no estoy del todo seguro. Pero podría hacer que cada aplicación inicie su propio servidor IPC y hacer que se conecten entre sí. Tal vez esto podría conducir a un código más limpiomás fácil. BTW Lazarus 0.9.30 finalmente fue lanzado ayer :-)

  11. #10
    En ese caso me quedaré con Lázaro.
    . Realmente aprecio que hagas DLL con el hilo de Lazarus; Cambió completamente la forma en que programo estas cosas. Tengo una pregunta si tiene un minuto: hice un programa en Lazarus que usa el paquete TSimpleIPC para permitir la comunicación entre dos probadores MT4 separados. Utilizo TSimpleIPCServer.OnMessage para procesar mensajes en la parte del servidor. El problema es que el cliente no sabe de antemano cuándo estará disponible el servidor. La forma en que lo he codificado en este momento es que el cliente verifica si el servidor está disponible; si no, se pondrá en espera (5) y luego lo verificará nuevamente. enviado: = Falso; repita si client1.ServerRunning luego comience client1.Connect; client1.SendStringMessage (outstr); enviado: = Verdadero; client1.Disconnect; fin de lo contrario comenzar a dormir (5); fin; hasta (enviado = Verdadero); Debe haber una mejor manera de hacer esto; me parece mal que esté usando Sleep (). ¿Es posible adjuntar un controlador de eventos a la función TSimpleIPCClient.ServerRunning?

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Uso de cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

Aviso legal: Ni forosforex.com ni ninguna persona involucrada en forosforex.com aceptarán ninguna responsabilidad por cualquier pérdida o daño en el trading como resultado de la confianza en la información contenida en este sitio web, incluidos datos, cotizaciones, gráficos y señales de compra/venta. Por favor, infórmese plenamente de los riesgos y costes asociados a las operaciones en los mercados financieros, una de las formas de inversión que más riesgos entrañan.
forosforex.com le quiere recordar que los datos contenidos en este sitio web no son necesariamente en tiempo real ni exactos. forosforex.com no asume responsabilidad alguna por las pérdidas en que usted podría incurrir como resultado de la utilización de estos datos. Este acuerdo se rige por su versión en inglés, que prevalecerá siempre que haya alguna discrepancia entre la versión en inglés y la versión en español. Los CFD son un producto difícil de entender, varios organismos reguladores consideran que no es adecuado para inversores minoristas debido a su complejidad y riesgo.
Advertencia de riesgo: Los CFDs son un producto difícil de entender, y puede no ser adecuado para inversores minoristas debido a su complejidad y riesgo. Existe la posibilidad de sufrir una pérdida igual o superior a la inversión. Por lo tanto, no debe invertir o arriesgar dinero que no pueda permitirse perder. Debe asegurarse de que comprende todos los riesgos. Antes de abrir una cuenta en un broker por favor sea consciente e infórmese de los riesgos asociados con el trading. El contenido de este sitio web no debe interpretarse como asesoramiento personal. ForosForex recomienda que busque el consejo de un asesor financiero independiente.