Скачать MetaTrader 5

NamedPipes, Indicator vs Advisor

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Евгений
18
Евгений 2015.08.09 22:50 

Здравствуйте.

Я использую именованные каналы (NamedPipes)  для обмена информацией с сервером.

Когда я использую именованные каналы в советнике, то все отлично работает. Но когда идентичный код я использую в индикаторе, все работает как нужно, но мой процессор, по непонятной мне причине, нагружается на 25%. При том, что в советнике все происходит практически незаметно для CPU. Если повесить два индикатора с каналами, то загрузка процессора составляет уже 50%, что делает использование именованных каналов в индикаторах весьма затруднительным.

Например, следующий код  подключения к серверу в функции OnInit() заметно нагружает процессор в индикаторе и абсолютно не загружает CPU в советнике. При условии, что север еще не запущен:

#include <Files\FilePipe.mqh>
CFilePipe  ExtPipe;

int OnInit()
{
 //--- wait for pipe server
 while(!IsStopped())
 {
  if(ExtPipe.Open("\\\\REN\\pipe\\MQL5.Pipe.Server",FILE_READ|FILE_WRITE|FILE_BIN)!=INVALID_HANDLE) break;
  if(ExtPipe.Open("\\\\.\\pipe\\MQL5.Pipe.Server",FILE_READ|FILE_WRITE|FILE_BIN)!=INVALID_HANDLE) break;
  Sleep(250);
 }
 Print("Client: pipe opened");
 return(INIT_SUCCEEDED);
}

Подскажите, пожалуйста, в чем причина загрузки CPU в индикаторе и есть ли возможность решить эту проблему.

Спасибо. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий