Советники: Мониторинг котировок (пример для маппинга) - страница 2

 
sergeev:

1)у вас ведь память модифицировать имеет право только сервер. клиенты её читают.

2)- посмотрите в сторону Pipe. там "события" прихода данных реализованы как само собой понятное - есть данные взяли, нет ждем.

3)да, сервер придется написать или содрать с MSDN, а клиенты готовые можно использовать прямо в MQL5

4)с периодичностью опроса тут к сожалению тоже никак нельзя разрулить.  При Sleep(1) в таком количестве экспертов шуметь не должно даже при работе с памятью.  Вам надо проверить тайминг работы функций может где то лишние проходы имеются и нагрузка.

1 - да только сервер (написанный мной из Ваших наработок)

2 - интересно, посмотрю только у меня задача "максимально вовремя" передать данные 4(8) байта, тоесть весь цикл (нужно выполнять очень часто

3 - думаю по аналогии со статьей сделаю свой только вот пока проблема даже тестовый пример не работает

4 - да переписал кое что отоптимизирвал код стало вроде лучше

 

Пробовал прикрутить Вашу dll в мт4.

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.
А вот код
#include <stdlib.mqh>

#define modeOpen                                                        0 // флаг открытия
#define modeCreate                                                      1 // флаг создания

#import "MemMap32.dll"
int MemOpen(string path,int size,int mode,int &err); // открываем/создаем файл в памяти, получаем хендл
void MemClose(int hmem); // закрываем файл в памяти
int MemGrows(int hmem,string path,int newsize,int &err); // увеличиваем размер файла в памяти
int MemWrite(int hmem,int &v[], int pos, int sz, int &err); // запись int(4) вектора v в память с указанной позиции pos, размером sz
int MemRead(int hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz

#import


int hmem,err; // 
string file; // имя файла в памяти


int init()
   {
   file="Local\\123"; // имя файла в памяти

   hmem=MemOpen(file,-1,modeOpen,err); // открываем имеющийся файл
   if(hmem>0) // если открыли
     {
      Print("open OK h="+hmem);
     }
   else
   if(err==-2) // если не открыли,
     {
      Print("-err("+err+") memfile not found.");

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

крутите отверткой правильно

 
sergeev:

крутите отверткой правильно

В Вашем примере по ссылке используется MemMap.dll

А ее там нет,  есть MEmMap32.dll

В мт5 работает, а в мт4 не находит файл.

Изначально неправильно объявил err нужно было как массив, на этом спасибо

 
Подскажите как обойти вот это
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'

НА сервере автоматом ставится х64 версия терминала мт5

у меня на ноуте Win7x64 но стоит обычная 32 разрядная версия терминала и обновляться до х64 сама не пытается.