Échange de données entre deux terminaux MT4 ? - page 3

 
granit77:
goldtrader: N'y a-t-il pas conflit d'intérêt lorsqu'un EA ouvre un fichier en écriture et que, pendant que le fichier est encore ouvert, un autre EA ouvre (ou tente d'ouvrir) le même fichier en lecture ?
En tant que personne confiante dans le pouvoir de la science, je trouve la situation un peu dramatique. Vous pouvez lire autant que dix personnes, mais pour écrire, vous pouvez utiliser des contrôles, interdire les drapeaux, etc. C'est une question purement technique et non un obstacle. Il s'agit d'une question purement technique qui ne constitue pas un obstacle. Les fichiers, où qu'ils soient, sont depuis longtemps lus et écrits à l'aide de l'API. Il existe d'autres moyens intéressants de transférer des informations entre les terminaux, qui n'ont pas encore été utilisés. Par exemple, pour transférer des informations sous la forme d'une variable d'environnement Windows.
Je suis d'accord. J'aimerais aussi faire de la transmission de données sans fichier, c'est plus rapide et plus fiable. Mais je pense que personne n'a encore rien à dire à ce sujet, c'est pourquoi tout le monde fait une fixation sur le transfert via un fichier((((.
 
goldtrader:
gravity001:

Il n'y a pas de problème parce qu'un EA continue d'écrire dans le fichier et l'autre EA continue de lire le fichier et l'ordre dans lequel cela se produit n'a pas d'importance. Pour vérifier la pertinence des données, j'ai utilisé l'heure locale, c'est-à-dire que les citations sont écrites toutes les 100 millisecondes, puis leur pertinence est vérifiée en fonction de l'heure locale.


Ne s'agit-il pas d'une situation conflictuelle, lorsqu'un EA ouvre un fichier en écriture et que, pendant qu'il est encore ouvert, un autre EA ouvre (ou tente d'ouvrir) le même fichier en lecture ?
Non, il ne s'agit pas d'un conflit, car vous pouvez lire un fichier à tout moment, même s'il est ouvert en écriture. Mais si le même fichier est ouvert en écriture deux fois en même temps, il y aura un conflit.
 
zhuki:

Pour information, si vous cliquez 4 fois sur terminal.exe, deux copies du même terminal s'ouvriront, et les chemins doivent être les mêmes.

J'ai essayé de cliquer, ça n'a pas marché. Vous êtes sûr que ça marche ?
 
gravity001:

J'aimerais aussi faire du transfert de données sans fichier, c'est plus rapide et plus fiable. Mais je pense que jusqu'à présent personne n'a rien à dire à ce sujet, c'est pourquoi tous sont bloqués dans le transfert par un fichier(((

Est-il possible de réserver un espace mémoire avec le droit d'y accéder pour 2 applications ?

C'est une sorte de conflit clair aussi, avec la provocation d'erreurs de ce genre :




0009 0x0009 Adresse de gestion de la mémoire non valide

0998 0x03E6 Tentative d'accès à une adresse mémoire non valide

L'une des applications va essayer d'accéder à une adresse mémoire à laquelle elle n'a pas de droits d'accès.


 
D500_Rised:
Leproblème est le suivant : le problème n'est pas résolu en premier lieu :

Je veux aussi passer les données sans fichier, c'est plus rapide et plus fiable. Mais je pense que personne n'a encore rien à dire à ce sujet, c'est pourquoi tout le monde fait une fixation sur le transfert via un fichier((((.

Est-il possible de réserver un espace mémoire avec le droit d'y accéder pour 2 applications ?

C'est une sorte de conflit clair aussi, avec la provocation d'erreurs de ce genre :




0009 0x0009 Adresse de gestion de la mémoire non valide

0998 0x03E6 Tentative d'accès à une adresse de mémoire non valide

L'une des applications va essayer d'accéder à une adresse mémoire à laquelle elle n'a pas de droits d'accès.


Peut-être que tu ne peux pas, je n'en suis pas sûr. Ici, dans ce fil https://forum.mql4.com/ru/3393 ils ont écrit sur GlobalAddAtom. Si j'ai bien compris, de cette façon, une variable peut être passée sans fichier, c'est-à-dire par la mémoire. Mais je ne sais pas comment faire((((


Vous avez également donné un exemple, pouvez-vous me dire comment vous avez essayé de le faire ?

 

Oh, une idée a encore surgi dans ma tête - le presse-papiers de Windows est accessible en lecture-écriture par les applications sans aucune restriction d'adresse mémoire !

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

Mais voici un autre petit bâton dans la roue :

Le presse-papiers est contrôlé par l'utilisateur. La fenêtre ne doit transférer des données vers ou depuis le presse-papiers qu'en réponse à une commande de l'utilisateur. La fenêtre ne doit pas utiliser le presse-papiers pour transférer des données sans en avertir l'utilisateur.

Donc, seulement l'API :^(

 
D500_Rised:

Oh, une idée m'est revenue en tête. Le presse-papiers de Windows est accessible en lecture-écriture par les applications sans aucune restriction d'adresse mémoire !

Unpresse-papiers est un ensemble de fonctions et de messages qui permet de transférer des données à des programmes d'application conçus à l'aide de l'interface de programmation d'application( API) Microsoft® Win32®. Comme tous les programmes d'application ont accès au presse-papiers, les données peuvent facilement être déplacées entre les applications ou au sein d'un programme d'application.

Mais voici un autre petit bâton dans la roue :

Le presse-papiers est piloté par l'utilisateur. La fenêtre ne doit transférer des données vers ou depuis le presse-papiers qu'en réponse à une commande de l'utilisateur. La fenêtre ne doit pas utiliser le presse-papiers pour transférer des données sans en avertir l'utilisateur.

Donc, seulement l'API :^(

Cela semble clair, mais comment le mettre en œuvre, pouvez-vous être plus précis ?
 

Soit vous apprenez vous-même l'API Win 32, soit vous cherchez un codeur qui accepte de faire ce travail. Il n'y a pas beaucoup de choix ici.

Mais à mon avis, ça ne vaut pas le coût.

 
gravity001:
zhuki:

Pour mémoire, si vous cliquez 4 fois sur terminal.exe, deux copies du même terminal s'ouvriront, et les chemins devraient être les mêmes.

J'ai essayé de cliquer, ça n'a pas marché. Vous êtes sûr que ça marche pour vous ?
J'ai réessayé, cela ouvre deux copies du même terminal. Je ne l'ai pas inventé moi-même, c'est un fait connu.
 
Voici la discussion https://forum.mql4.com/ru/9244#49606