Вопрос по pipes

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

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

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

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

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

Andrey Miguzov
3168
Andrey Miguzov  
VDev:

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

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

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

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

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

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

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

Alexey Volchanskiy
30055
Alexey Volchanskiy  
MigVRN:

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

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

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

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

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

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

Alexey Volchanskiy
30055
Alexey Volchanskiy  
MigVRN:

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

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

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

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

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

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

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

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

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

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

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

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

Alexander Bereznyak
29803
Alexander Bereznyak  
artemiusgreat:

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

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

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

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

Ilya Baranov
4177
Ilya Baranov  

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

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

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

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

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

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