Expert Advisors: Monitoring von Quotierungen (Speicherabbilddatei = Memory Mapped File) - Seite 2

 
sergeev:

1) nur der server hat das recht, den speicher zu verändern. die clients lesen ihn.

2)- schauen Sie sich Pipe an. Dort sind die "Ereignisse" der Datenankunft selbsterklärend implementiert - Sie haben Daten, wir nehmen sie, wir warten auf sie.

3)- ja, Sie müssen einen Server schreiben oder von MSDN kopieren, aber fertige Clients können direkt in MQL5 verwendet werden.

4) leider kann man dieses Problem nicht mit der Polling-Periodizität lösen. Sleep(1) sollte auch bei der Arbeit mit dem Speicher keine Geräusche machen. Man sollte das Timing der Funktionen überprüfen, vielleicht gibt es irgendwo zusätzliche Durchläufe und Last.

1 - nur ein Server (von mir aus Ihrer Arbeit geschrieben)

2 - interessant, ich werde nur schauen, ich habe eine Aufgabe "so zeitnah wie möglich", um Daten 4(8) Bytes zu übertragen, d.h. den ganzen Zyklus (muss sehr oft durchgeführt werden)

3 - ich denke, in Analogie zu dem Artikel werde ich meine eigene machen, aber bisher funktioniert das Problem auch das Testbeispiel nicht.

4 - ja, ich habe einige Dinge umgeschrieben, den Code optimiert, es scheint besser zu sein.

 

Ich habe versucht, Ihre dll zu mt4 hinzuzufügen.

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.
Hier ist der Code
#include <stdlib.mqh>

#define modeOpen                                                        0 // Flagge öffnen
#define modeCreate                                                      1 // Erstellungskennzeichen

#import "MemMap32.dll"
int MemOpen(string path,int size,int mode,int &err); // Datei im Speicher öffnen/erstellen, Handle holen
void MemClose(int hmem); // Schließen der Datei im Speicher
int MemGrows(int hmem,string path,int newsize,int &err); // die Größe der Datei im Speicher erhöhen
int MemWrite(int hmem,int &v[], int pos, int sz, int &err); // int(4) Vektor v ab der angegebenen Position pos, Größe sz in den Speicher schreiben
int MemRead(int hmem, int &v[], int pos, int sz, int &err); // Lesen des Vektors v ab der angegebenen Position pos mit der Größe sz

#import


int hmem,err; // 
string file; // Dateiname im Speicher


int init()
   {
   file="Local\\123"; // Dateiname im Speicher

   hmem=MemOpen(file,-1,modeOpen,err); // Öffnen einer vorhandenen Datei
   if(hmem>0) // wenn geöffnet
     {
      Print("open OK h="+hmem);
     }
   else
   if(err==-2) // wenn nicht geöffnet,
     {
      Print("-err("+err+") memfile not found.");

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

den Schraubendreher nach rechts drehen

 
sergeev:

den Schraubenzieher richtig drehen

Ihr Beispiel im Link verwendet MemMap.dll

Sie ist nicht da, es ist MEmMap32.dll.

In mt5 funktioniert es, aber in mt4 findet es die Datei nicht.

Ursprünglich falsch deklarierter err hätte ein Array sein sollen, danke dafür

 
Können Sie mir sagen, wie ich das umgehen kann?
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'

Die x64-Version von terminal mt5 wird automatisch auf dem Server installiert.

Ich habe Win7x64 auf meinem Laptop, aber ich habe eine normale 32-Bit-Version von Terminal und es versucht nicht, selbst auf x64 zu aktualisieren.