Sistemi Esperti: Monitoraggio dei preventivi (esempio di mappatura) - pagina 2

 
sergeev:

1) solo il server ha il diritto di modificare la memoria. i client la leggono.

2)- guardate Pipe. lì gli "eventi" di arrivo dei dati sono implementati in modo autoesplicativo - voi avete i dati, noi li prendiamo, noi li aspettiamo.

3)- sì, dovrete scrivere un server o copiarlo da MSDN, ma i client già pronti possono essere utilizzati direttamente in MQL5.

4) sfortunatamente, non è possibile risolvere questo problema con la periodicità del polling. Sleep(1) non dovrebbe fare rumore anche quando si lavora con la memoria. Dovreste controllare la tempistica delle funzioni, forse ci sono passaggi e carichi extra da qualche parte.

1 - solo un server (scritto da me a partire dai vostri sviluppi)

2 - interessante, guarderò solo ho un compito "il più tempestivamente possibile" per trasferire i dati 4(8) byte, cioè l'intero ciclo (deve essere eseguito molto spesso)

3 - Penso che per analogia con l'articolo farò il mio, ma finora il problema anche l'esempio di prova non funziona.

4 - sì, ho riscritto alcune cose ottimizzando il codice, sembra essere migliore.

 

Ho provato ad aggiungere la vostra 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.
Ecco il codice
#include <stdlib.mqh>

#define modeOpen                                                        0 // flag di apertura
#define modeCreate                                                      1 // flag di creazione

#import "MemMap32.dll"
int MemOpen(string path,int size,int mode,int &err); // aprire/creare un file in memoria, ottenere l'handle
void MemClose(int hmem); // chiudere il file in memoria
int MemGrows(int hmem,string path,int newsize,int &err); // aumenta la dimensione del file in memoria
int MemWrite(int hmem,int &v[], int pos, int sz, int &err); // scrivere il vettore int(4) v in memoria dalla posizione pos specificata, dimensione sz
int MemRead(int hmem, int &v[], int pos, int sz, int &err); // leggere il vettore v dalla posizione pos specificata con dimensione sz

#import


int hmem,err; // 
string file; // nome del file in memoria


int init()
   {
   file="Local\\123"; // nome del file in memoria

   hmem=MemOpen(file,-1,modeOpen,err); // aprire un file esistente
   if(hmem>0) // se aperto
     {
      Print("open OK h="+hmem);
     }
   else
   if(err==-2) // se non è aperto,
     {
      Print("-err("+err+") memfile not found.");

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

girare il cacciavite a destra

 
sergeev:

girare correttamente il cacciavite

Il vostro esempio nel link utilizza MemMap.dll

Non c'è, è MEmMap32.dll.

Funziona in mt5, ma in mt4 non trova il file.

Inizialmente l'erre dichiarata in modo errato avrebbe dovuto essere un array, grazie per questo

 
Potete dirmi come aggirare questo problema?
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 versione x64 di terminal mt5 è installata automaticamente sul server.

Ho Win7x64 sul mio portatile, ma ho una versione normale di terminal a 32 bit e non cerca di aggiornarsi a x64.