¿Intercambio de datos entre dos terminales MT4? - página 3

 
granit77:
goldtrader: ¿No es una situación de conflicto cuando un EA abre un archivo para escribir y mientras el archivo sigue abierto, otro EA abre (o intenta abrir) el mismo archivo para leer?
Yo, como persona que confía en el poder de la ciencia, encuentro la situación un poco dramática. Puede leer tanto como diez personas, pero para escribir puede utilizar cheques, prohibir banderas, etc. Es una cuestión puramente técnica y no un obstáculo. Se trata de una cuestión puramente técnica y no es un obstáculo, hace tiempo que se leen y escriben archivos de cualquier lugar utilizando la API. Son interesantes otras formas de transferir información entre terminales, que no se han utilizado antes. Por ejemplo, para transferir información en forma de variable de entorno de Windows.
Estoy de acuerdo. También me gustaría hacer la transmisión de datos sin archivo, es más rápido y fiable. Pero no creo que nadie tenga nada que decir al respecto todavía, por eso todo el mundo está obsesionado con la transferencia a través de un archivo((((
 
goldtrader:
gravedad001:

No hay problema porque un EA sigue escribiendo en el archivo y el otro EA sigue leyendo del archivo y no importa en qué orden ocurra. Para comprobar la relevancia de los datos he utilizado la hora local, es decir, las citas se escriben cada 100 milisegundos y luego se comprueba su relevancia según la hora local.


¿No es una situación de conflicto, cuando un EA abre un archivo para escribir y mientras está abierto, otro EA abre (o intenta abrir) el mismo archivo para leer?
No, no es un conflicto, porque puedes leer un archivo en cualquier momento, aunque esté abierto para escribir. Pero si el mismo archivo está abierto para escribir dos veces al mismo tiempo, entonces habrá un conflicto.
 
zhuki:

A título informativo, si haces clic en terminal.exe 4 veces, se abrirán dos copias del mismo terminal, y las rutas deben ser las mismas.

Intenté hacer clic, pero no funcionó. ¿Seguro que funciona?
 
gravity001:

También me gustaría hacer la transferencia de datos sin archivo, es más rápido y más fiable. Pero creo que hasta ahora nadie tiene nada que decir al respecto, por eso todos están atascados en la transferencia a través de un archivo(((

¿Es posible reservar un espacio de memoria con derecho de acceso para 2 aplicaciones?

Es un conflicto claro también, con la provocación de errores de este tipo:




0009 0x0009 Dirección de gestión de memoria no válida

0998 0x03E6 Intento de acceso a dirección de memoria no válida

Una de las aplicaciones intentará acceder a una dirección de memoria a la que no tiene derechos de acceso


 
D500_Rised:
El problema es el siguiente: el problema no se resuelve en primer lugar:

Yo también quiero pasar los datos sin archivo, es más rápido y fiable. Pero no creo que nadie tenga nada que decir al respecto todavía, por eso todo el mundo está obsesionado con la transferencia a través de un archivo((((

¿Es posible reservar un espacio de memoria con derecho de acceso para 2 aplicaciones?

Es un conflicto claro también, con la provocación de errores de este tipo:




0009 0x0009 Dirección de gestión de memoria no válida

0998 0x03E6 Intento de acceso a dirección de memoria no válida

Una de las aplicaciones intentará acceder a una dirección de memoria a la que no tiene derechos de acceso


Tal vez no se pueda, no lo sé con seguridad. Aquí, en este hilo https://forum.mql4.com/ru/3393 escribieron sobre GlobalAddAtom. Si lo he entendido bien, de esta manera se puede pasar una variable sin un archivo, es decir, a través de la memoria. Pero no sé cómo hacerlo(((


También has puesto un ejemplo, ¿puedes decirme cómo has intentado hacerlo?

 

Ah, se me ha vuelto a ocurrir una idea: ¡el portapapeles de Windows es de lectura-escritura accesible por las aplicaciones sin ninguna restricción de dirección de memoria!

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

Pero aquí hay otro pequeño palo en la rueda:

El portapapeles es controlado por el usuario. La ventana sólo debe transferir datos hacia o desde el portapapeles en respuesta a un comando del usuario. La ventana no debe utilizar el portapapeles para transferir datos sin notificar al usuario.

Así que, sólo la API :^(

 
D500_Rised:

Se me ha vuelto a ocurrir una idea: ¡el portapapeles de Windows es de lectura-escritura accesible por las aplicaciones sin ninguna restricción de dirección de memoria!

Elportapapeles es un conjunto de funciones y mensajes que permite transferir datos a programas de aplicación diseñados con la interfaz de programación de aplicaciones( API) de Microsoft® Win32®. Como todos los programas de aplicación tienen acceso al portapapeles, los datos pueden moverse fácilmente entre aplicaciones o dentro de un programa de aplicación.

Pero aquí hay otro pequeño palo en la rueda:

El portapapeles es controlado por el usuario. La ventana sólo debe transferir datos hacia o desde el portapapeles en respuesta a un comando del usuario. La ventana no debe utilizar el portapapeles para transferir datos sin avisar al usuario.

Así que, sólo la API :^(

Parece claro, pero cómo implementarlo, ¿puede ser más específico?
 

O bien aprendes tú mismo la API de Win 32 o buscas un codificador que se encargue del trabajo. Aquí no hay muchas opciones.

Pero en mi opinión, no vale la pena el coste.

 
gravity001:
zhuki:

Sólo para que conste, si haces clic en terminal.exe 4 veces, se abrirán dos copias del mismo terminal, y las rutas deberían ser las mismas.

Intenté hacer clic, pero no funcionó. ¿Estás seguro de que te funciona?
Lo he vuelto a intentar, se abren dos copias del mismo terminal. Esto no se me ha ocurrido a mí, es un hecho conocido desde hace tiempo.
 
Aquí está la discusión https://forum.mql4.com/ru/9244#49606
Razón de la queja: