Вопрос по pipes

 

Только сейчас посмотрел код в стандартной библиотеке, вижу реализацию только клиента в FilePipe.mqh . Открытия канала со стороны сервера с помощью CreateNamedPipe нет.
Я правильно понял, что для обмена инфой между терминалами это штука не работает?

Я имею в виду с соблюдением правил маркета, то есть запретом использовать любые стандартные от Windows, в которых и сидит CreateNamedPipe.

В принципе попробовал через общие файлы, вроде пашет, так как обмен нечастый. Но опять же, мьютекс не поставить, придется файл открывать-закрывать, а остальным терминалам в это время ждать. Печалько.. Для себя и своих клиентов сделал, конечно, через MMF, а для маркета придется фичу выкинуть.

Или есть еще пути?

 
VDev:

Только сейчас посмотрел код в стандартной библиотеке, вижу реализацию только клиента в FilePipe.mqh . Открытия канала со стороны сервера с помощью CreateNamedPipe нет.
Я правильно понял, что для обмена инфой между терминалами это штука не работает?

Я имею в виду с соблюдением правил маркета, то есть запретом использовать любые стандартные от Windows, в которых и сидит CreateNamedPipe.

В принципе попробовал через общие файлы, вроде пашет, так как обмен нечастый. Но опять же, мьютекс не поставить, придется файл открывать-закрывать, а остальным терминалам в это время ждать. Печалько.. Для себя и своих клиентов сделал, конечно, через MMF, а для маркета придется фичу выкинуть.

Или есть еще пути?

Правильно поняли - не работает.

Между терминалами, если штатными средствами, без использования DLL и сторонних программ - только файлы.

Если внутри терминала между программами - то есть ещё варианты, помимо файлов (в зависимости от объема передаваемой инфы). Я уже говорил, немного в другой теме, что у многих трудности из-за этого  возникают...

 
MigVRN:

Правильно поняли - не работает.

Между терминалами, если штатными средствами, без использования DLL и сторонних программ - только файлы.

Если внутри терминала между программами - то есть ещё варианты, помимо файлов (в зависимости от объема передаваемой инфы). Я уже говорил, немного в другой теме, что у многих трудности из-за этого  возникают...

Мне надо именнно между несколькими терминалами, значит, общие файлы. А заодно уж, внутри терминала между советниками, кроме глобальных переменных, какие пути еще есть? Тему прочитал, но там про обмен советника с индикатором.
 
VDev:
Мне надо именнно между несколькими терминалами, значит, общие файлы. А заодно уж, внутри терминала между советниками, кроме глобальных переменных, какие пути еще есть? Тему прочитал, но там про обмен советника с индикатором.

Там Komposter предлагал попробовать через параметры функции EventChartCustom() - 3 переменных за раз можно передать. По скорости передачи нечего сказать не могу - не проверял. 

В той теме организована передача из советника в индикатор, но тем же образом можно заставить обмениваться и экспертов на разных графиках. Я в код-базу код отправил на проверку - как появится ссылку в эту тему положу. 

 
MigVRN:

Там Komposter предлагал попробовать через параметры функции EventChartCustom() - 3 переменных за раз можно передать. По скорости передачи нечего сказать не могу - не проверял. 

В той теме организована передача из советника в индикатор, но тем же образом можно заставить обмениваться и экспертов на разных графиках. Я в код-базу код отправил на проверку - как появится ссылку в эту тему положу. 

Да, я потом внимательно прочитал переписку - еще один нормальный способ внутри терминала.
 
Alexey Volchanskiy:

Только сейчас посмотрел код в стандартной библиотеке, вижу реализацию только клиента в FilePipe.mqh . Открытия канала со стороны сервера с помощью CreateNamedPipe нет.
Я правильно понял, что для обмена инфой между терминалами это штука не работает?

Я имею в виду с соблюдением правил маркета, то есть запретом использовать любые стандартные от Windows, в которых и сидит CreateNamedPipe.

В принципе попробовал через общие файлы, вроде пашет, так как обмен нечастый. Но опять же, мьютекс не поставить, придется файл открывать-закрывать, а остальным терминалам в это время ждать. Печалько.. Для себя и своих клиентов сделал, конечно, через MMF, а для маркета придется фичу выкинуть.

Или есть еще пути?

если нужно могу скинуть класс по работе в обе стороны
 
Konstantin Karpov:
если нужно могу скинуть класс по работе в обе стороны
Для четверки есть такой класс?
 

Разве этот метод не создает канал, если его нет?

CFilePipe::Open(const string file_name,const int open_flags)

Эти статьи точно видели?

Хм, хотя в статьях тоже используются DLL ... если МТ не может создавать канал, то пайпы в МТ бессмысленны и беспощадны :)

 
artemiusgreat:

Хм, хотя в статьях тоже используются DLL ... если МТ не может создавать канал, то пайпы в МТ бессмысленны и беспощадны :)

Согласен, от внешней DLL не избавились. Получился костыль.
 

Ждем штатную поддержку SQL. Передача инфы через таблицу будет большим шагом вперед.

Пока можно предложит передачу через механизм кастомных событий ну и через глобальные переменные в некоторых случаях.

 

При использовании CFilePipe есть ли способ узнать, что сервер отключился?

Проверяю при запуске клиента на MQL - пока сервер не запущен Open (FileOpen) возвращает INVALID_HANDLE. Запускаю сервер - получаю корректный хендл и дальше работаю с ним.

Но если сервер остановить, то клиент на MQL ничего не замечает. Пробовал функции SIze (FileSize), IsEnding (FileIsEnding), но они возвращают корректные значения и ошибки (GetLastError) не возникает.

Как можно обнаружить отключение сервера?

Или только по прекращению трансляции "сердцебиения" от сервера?