Обмен данными между двумя терминалами MT4? - страница 3

 
granit77:
goldtrader: А разве это не конфликтная ситуация, когда один советник открывает файл для записи и в то время пока файл ещё не закрыт, другой советник открывает (или пытается открыть) его же для чтения?
Мне, как человеку, уверенному в могуществе науки, ситуация кажется несколько драматизированной. Читать можно хоть вдесятером, а для записи могут использоваться проверки, запрещающие флаги и пр. Это вопрос чисто технический и препятствием не является, файлы из любого места давно уже читают и пишут с помощью API. Интересны другие способы передачи информации между терминалами, ранее не применявшиеся. Например, передавать информацию в виде переменной среды Windows.  
Согласен. Мне тоже хочеться сделать передачу данных без файла, так и быстрее и надежнее. Но думаю пока по этому поводу некому что-либо сказать, поэтому и все зациклились на передаче через файл(((
 
goldtrader:
gravity001:

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


А разве это не конфликтная ситуация, когда один советник открывает файл для записи и в то время пока файл ещё не закрыт, другой советник открывает (или пытается открыть) его же для чтения?
Нет, не конфликтная, так как читать можно хоть когда даже если файл открыт для записи. Вот, если бы один и тот же файл одновременно открыть 2 раза для записи, тогда будет конфликт.
 
zhuki:

Для сведения, если 4 раза щёлкнуть по terminal.exe то откроется 2 копии одного терминала,а там пути должны быть одинаковые.

Я пытался нажимать, у меня не получилось. У Вас точно работает?
 
gravity001:

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

А что,возможно зарезервировать место в памяти с правом доступа к нему 2 приложений?

Это тоже вроде как явный конфликт, с провокацией ошибок такого рода:




0009 0x0009 Неверный адрес управляющего блока памяти

0998 0x03E6 Неверная попытка доступа к адресу памяти

Одно из приложений будет пытаться обратиться к адресу памяти, к которому у него нет права доступа


 
D500_Rised:
gravity001:

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

А что,возможно зарезервировать место в памяти с правом доступа к нему 2 приложений?

Это тоже вроде как явный конфликт, с провокацией ошибок такого рода:




0009 0x0009 Неверный адрес управляющего блока памяти

0998 0x03E6 Неверная попытка доступа к адресу памяти

Одно из приложений будет пытаться обратиться к адресу памяти, к которому у него нет права доступа


Может быть и нельзя, я точно не знаю. Вот, в этой ветке https://forum.mql4.com/ru/3393 про GlobalAddAtom писали. Если я правильно понял, то таким способом можно переменную передать без файла, т.е. через память. Но как это сделать я не знаю(((


Вы еще пример привели, скажите как Вы пытались сделать?

 

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

Буфер обмена (clipboard)- набор функций и сообщений, который делает возможным передачу данных в прикладные программы, разработанные при помощи Microsoft ® Win32 ® прикладного программного интерфейса (API). Поскольку все прикладные программы имеют доступ к буферу обмена, данные могут быть легко перемещаемы между приложениями или внутри прикладной программы.

Но вот еще маленькая палка в колесо:

Буфер обмена управляется пользователем. Окно должно передавать данные в буфер обмена или из него только в ответ на команду от пользователя. Окно не должно использовать буфер обмена для передачи данных без извещения об этом пользователя.

Так что, только API :^(

 
D500_Rised:

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

Буфер обмена (clipboard)- набор функций и сообщений, который делает возможным передачу данных в прикладные программы, разработанные при помощи Microsoft ® Win32 ® прикладного программного интерфейса (API). Поскольку все прикладные программы имеют доступ к буферу обмена, данные могут быть легко перемещаемы между приложениями или внутри прикладной программы.

Но вот еще маленькая палка в колесо:

Буфер обмена управляется пользователем. Окно должно передавать данные в буфер обмена или из него только в ответ на команду от пользователя. Окно не должно использовать буфер обмена для передачи данных без извещения об этом пользователя.

Так что, только API :^(

Вроде, понятно, но как это реализовать, можно покнкретнее?
 

Либо осваивайте Win 32 API самостоятельно, либо ищите кодера, который возьмется за это дело. Выбор тут не велик.

Только, на мой взгляд, не стоит эта система таких затрат.

 
gravity001:
zhuki:

Для сведения, если 4 раза щёлкнуть по terminal.exe то откроется 2 копии одного терминала,а там пути должны быть одинаковые.

Я пытался нажимать, у меня не получилось. У Вас точно работает?
Еще раз попробовал открывается 2 копии одного и того же терминала.Я это не сам придумал,это давно известный факт.
 
Вот обсуждение https://forum.mql4.com/ru/9244#49606
Причина обращения: