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.
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'handlevoid MemClose(int hmem); // chiudere il file in memoriaint MemGrows(int hmem,string path,int newsize,int &err); // aumenta la dimensione del file in memoriaint MemWrite(int hmem,int &v[], int pos, int sz, int &err); // scrivere il vettore int(4) v in memoria dalla posizione pos specificata, dimensione szint MemRead(int hmem, int &v[], int pos, int sz, int &err); // leggere il vettore v dalla posizione pos specificata con dimensione sz#importint hmem,err; // string file; // nome del file in memoriaint init()
{
file="Local\\123"; // nome del file in memoria
hmem=MemOpen(file,-1,modeOpen,err); // aprire un file esistenteif(hmem>0) // se aperto
{
Print("open OK h="+hmem);
}
elseif(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);
}
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.
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.
Ecco il codicegirare il cacciavite a destra
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
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.