Intercâmbio de dados entre dois terminais MT4? - página 3

 
granit77:
goldtrader: Não é uma situação de conflito quando um EA abre um arquivo para escrita e enquanto o arquivo ainda está aberto, outro EA abre (ou tenta abrir) o mesmo arquivo para leitura?
Eu, como uma pessoa confiante no poder da ciência, considero a situação um pouco dramática. Você pode ler até dez pessoas, mas para escrever pode usar cheques, proibir bandeiras, etc. É uma questão puramente técnica e não um obstáculo. Esta é uma questão puramente técnica e não é um obstáculo, arquivos de qualquer lugar já foram lidos e escritos há muito tempo usando API. Interessantes são outras formas de transferir informações entre terminais, que não foram utilizadas antes. Por exemplo, para transferir informações na forma de uma variável de ambiente Windows.
Eu concordo. Eu também gostaria de fazer a transmissão de dados sem arquivo, é mais rápida e mais confiável. Mas acho que ninguém ainda tem nada a dizer sobre isso, é por isso que todo mundo está fixado em transferir através de um arquivo((((
 
goldtrader:
gravidade001:

Não há problema porque uma EA continua escrevendo no arquivo e a outra EA continua lendo do arquivo e não importa em que ordem isso aconteça. Para verificar a relevância dos dados, usei a hora local, ou seja, as citações são escritas a cada 100 milissegundos e depois são verificadas quanto à relevância pela hora local.


Não é uma situação de conflito, quando uma EA abre um arquivo para escrita e enquanto ele ainda está aberto, outra EA abre (ou tenta abrir) o mesmo arquivo para leitura?
Não, não é um conflito, porque você pode ler um arquivo a qualquer momento, mesmo que ele esteja aberto para escrita. Mas se o mesmo arquivo estiver aberto para escrita duas vezes ao mesmo tempo, então haverá um conflito.
 
zhuki:

Para informação, se você clicar em terminal.exe 4 vezes, duas cópias do mesmo terminal serão abertas, e os caminhos devem ser os mesmos.

Eu tentei clicar, não funcionou. Você tem certeza de que funciona?
 
gravity001:

Eu também gostaria de fazer transferência de dados sem arquivo, é mais rápido e mais confiável. Mas eu acho que até agora ninguém tem nada a dizer sobre isso, é por isso que todos estão presos na transferência através de um arquivo(((

É possível reservar espaço de memória com o direito de acessá-lo para 2 aplicações?

É uma espécie de conflito claro também, com a provocação de erros deste tipo:




0009 0x0009 Endereço de gerenciamento de memória inválido

0998 0x03E6 Tentativa de acesso a endereço de memória inválido

Uma das aplicações tentará acessar um endereço de memória para o qual não tem direitos de acesso


 
D500_Rised:
O problema é o seguinte: o problema não é resolvido em primeiro lugar:

Eu também quero passar dados sem arquivo, é mais rápido e mais confiável. Mas acho que ninguém tem nada a dizer sobre isso ainda, é por isso que todo mundo está fixado em transferir através de um arquivo((((

É possível reservar espaço de memória com o direito de acessá-lo para 2 aplicações?

É uma espécie de conflito claro também, com a provocação de erros deste tipo:




0009 0x0009 Endereço de gerenciamento de memória inválido

0998 0x03E6 Tentativa de acesso a endereço de memória inválido

Uma das aplicações tentará acessar um endereço de memória para o qual não tem direitos de acesso


Talvez você não possa, não sei ao certo. Aqui, neste tópico https://forum.mql4.com/ru/3393 eles escreveram sobre a GlobalAddAtom. Se eu acertei, desta forma uma variável pode ser passada sem um arquivo, ou seja, através da memória. Mas eu não sei como fazer(((


Você também deu um exemplo, pode me dizer como você tentou fazer isso?

 

Oh, um pensamento veio à minha cabeça novamente - a área de transferência do Windows é de leitura-escrita acessível por aplicativos sem qualquer restrição de endereço de memória!

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

Mas aqui está outro pequeno bastão na roda:

A prancheta é controlada pelo usuário. A janela só deve enviar dados para ou da área de transferência em resposta a um comando do usuário. A janela não deve usar a área de transferência para enviar dados sem informar o usuário.

Portanto, somente a API :^(

 
D500_Rised:

A área de transferência do Windows é de leitura-escrita acessível por aplicativos sem qualquer restrição de endereço de memória!

Umclipboard é um conjunto de funções e mensagens que torna possível a transferência de dados para programas de aplicação projetados usando a interface de programação de aplicações( API) Microsoft® Win32®. Como todos os programas de aplicação têm acesso à prancheta, os dados podem ser facilmente movimentados entre as aplicações ou dentro de um programa de aplicação.

Mas aqui está outro pequeno bastão na roda:

A prancheta é controlada pelo usuário. A janela só deve transferir dados para ou da área de transferência em resposta a um comando do usuário. A janela não deve usar a prancheta para transferir dados sem notificar o usuário.

Portanto, somente a API :^(

Parece claro, mas como implementá-lo, você pode ser mais específico?
 

Aprenda você mesmo o Win 32 API ou procure um codificador que aceite o trabalho. Não há muita escolha aqui.

Mas na minha opinião, este sistema não vale o custo.

 
gravity001:
zhuki:

Para informação, se você clicar em terminal.exe 4 vezes, duas cópias do mesmo terminal serão abertas, e os caminhos devem ser os mesmos.

Eu tentei clicar, não funcionou. Você tem certeza de que está trabalhando para você?
Tentei novamente, ele abre duas cópias do mesmo terminal. Não fui eu que o inventei, é um fato bem conhecido.
 
Aqui está a discussão https://forum.mql4.com/ru/9244#49606