Asesores Expertos: Monitorización de cotizaciones (fichero mapeado en memoria) - página 2

 
sergeev:

1) sólo el servidor tiene derecho a modificar la memoria. los clientes la leen.

2)- mira Pipe. alli los "eventos" de llegada de datos se implementan como autoexplicativos - tu tienes datos, nosotros los tomamos, nosotros los esperamos.

3)si, tendras que escribir un servidor o copiarlo de MSDN, pero los clientes ya hechos se pueden usar directamente en MQL5.

4) por desgracia, no se puede resolver este problema con la periodicidad de sondeo. Sleep(1) no debe hacer ruido, incluso cuando se trabaja con la memoria. Usted debe comprobar la sincronización de las funciones, tal vez hay pases adicionales y la carga en algún lugar.

1 - sólo un servidor (escrito por mí de su trabajo)

2 - interesante, voy a mirar sólo tengo una tarea "lo más oportuna posible" para transferir datos 4(8) bytes, es decir, todo el ciclo (debe realizarse muy a menudo)

3 - Creo que por analogía con el artículo que voy a hacer mi propio, pero hasta ahora el problema, incluso el ejemplo de prueba no funciona.

4 - sí, he vuelto a escribir algunas cosas optimizado el código, parece ser mejor.

 

He intentado añadir su dll a mt4.

2013.04.01 00:03:49     _tradeBuySell_mt4 GBPCHF,H1: -unknow err(0)  h=0
2013.04.01 00:03:49     _tradeBuySell_mt4 GBPCHF,H1: function 'MemOpen' call from dll 'MemMap32.dll' critical error c0000005 at 666013E6.
Aquí está el código
#include <stdlib.mqh>

#define modeOpen                                                        0 // bandera abierta
#define modeCreate                                                      1 // bandera de creación

#import "MemMap32.dll"
int MemOpen(string path,int size,int mode,int &err); // abrir/crear fichero en memoria, obtener handle
void MemClose(int hmem); // cerrar el archivo en memoria
int MemGrows(int hmem,string path,int newsize,int &err); // aumentar el tamaño del fichero en memoria
int MemWrite(int hmem,int &v[], int pos, int sz, int &err); // escribir vector int(4) v en memoria desde la posición pos especificada, tamaño sz
int MemRead(int hmem, int &v[], int pos, int sz, int &err); // leer vector v desde la posición especificada pos con tamaño sz

#import


int hmem,err; // 
string file; // nombre del archivo en memoria


int init()
   {
   file="Local\\123"; // nombre del archivo en memoria

   hmem=MemOpen(file,-1,modeOpen,err); // abrir un fichero existente
   if(hmem>0) // si está abierto
     {
      Print("open OK h="+hmem);
     }
   else
   if(err==-2) // si no se abre,
     {
      Print("-err("+err+") memfile not found.");

     }
   else
     {
      Print("-unknow err("+err+")  h="+hmem);
      return(0);
     }
   Print("OK ("+err+") h="+hmem);   
 
      return(0);
   }
 

gire el destornillador a la derecha

 
sergeev:

girar correctamente el destornillador

Tu ejemplo en el enlace usa MemMap.dll

No está ahí, es MEmMap32.dll.

Funciona en mt5, pero en mt4 no encuentra el archivo.

Inicialmente mal declarado err debería haber sido un array, gracias por eso

 
¿Pueden decirme cómo evitarlo?
OK      1       01:10:31        tradeBuySell    'D:\MT5******\MQL5\Libraries\MemMap32.dll' is not 64-bit version
JF      1       01:10:37        tradeBuySell (GBPUSD,H1)        Cannot load 'D:\******\MQL5\Libraries\MemMap32.dll'

La versión x64 de terminal mt5 se instala automáticamente en el servidor.

Tengo Win7x64 en mi portátil, pero tengo una versión normal de 32 bits de terminal y no intenta actualizar a x64 en sí.