Scambio di dati tra due terminali MT4? - pagina 3

 
granit77:
goldtrader: non è una situazione di conflitto quando un EA apre un file per la scrittura e mentre il file è ancora aperto, un altro EA apre (o cerca di aprire) lo stesso file per la lettura?
Io, come persona fiduciosa nel potere della scienza, trovo la situazione un po' drammatica. Si può leggere quanto dieci persone, ma per scrivere si possono usare controlli, vietare le bandiere, ecc. È una questione puramente tecnica e non un ostacolo. Questa è una questione puramente tecnica e non è un ostacolo, i file da qualsiasi luogo sono stati letti e scritti a lungo usando API. Sono interessanti altri modi per trasferire informazioni tra i terminali, che non sono stati utilizzati prima. Per esempio, per trasferire informazioni sotto forma di una variabile d'ambiente di Windows.
Sono d'accordo. Vorrei anche fare la trasmissione dei dati senza file, è più veloce e più affidabile. Ma non credo che qualcuno abbia ancora qualcosa da dire al riguardo, ecco perché tutti si fissano sul trasferimento attraverso un file((((
 
goldtrader:
gravità001:

Non c'è nessun problema perché un EA continua a scrivere nel file e l'altro EA continua a leggere dal file e non importa in quale ordine avviene. Per controllare la rilevanza dei dati ho usato l'ora locale, cioè le citazioni vengono scritte ogni 100 millisecondi e poi vengono controllate per la rilevanza in base all'ora locale.


Non è una situazione di conflitto, quando un EA apre un file per la scrittura e mentre è ancora aperto, un altro EA apre (o cerca di aprire) lo stesso file per la lettura?
No, non è un conflitto, perché si può leggere un file in qualsiasi momento, anche se è aperto per la scrittura. Ma se lo stesso file è aperto per la scrittura due volte allo stesso tempo, allora ci sarà un conflitto.
 
zhuki:

Per informazione, se cliccate su terminal.exe 4 volte, si apriranno due copie dello stesso terminale, e i percorsi devono essere gli stessi.

Ho provato a cliccare, ma non ha funzionato. Sei sicuro che funzioni?
 
gravity001:

Vorrei anche fare il trasferimento dei dati senza file, è più veloce e più affidabile. Ma penso che finora nessuno abbia niente da dire a riguardo, ecco perché tutti sono bloccati nel trasferimento attraverso un file(((

È possibile riservare uno spazio di memoria con il diritto di accedervi per 2 applicazioni?

È anche una sorta di chiaro conflitto, con errori provocatori di questo tipo:




0009 0x0009 Indirizzo di gestione della memoria non valido

0998 0x03E6 Tentativo di accesso all'indirizzo di memoria non valido

Una delle applicazioni cercherà di accedere a un indirizzo di memoria a cui non ha diritti di accesso


 
D500_Rised:
Il problemaè questo: il problema non è risolto in primo luogo:

Voglio passare i dati anche senza file, è più veloce e più affidabile. Ma non credo che qualcuno abbia ancora qualcosa da dire al riguardo, ecco perché tutti si fissano sul trasferimento attraverso un file((((

È possibile riservare uno spazio di memoria con il diritto di accedervi per 2 applicazioni?

È anche una sorta di chiaro conflitto, con errori provocatori di questo tipo:




0009 0x0009 Indirizzo di gestione della memoria non valido

0998 0x03E6 Tentativo di accesso all'indirizzo di memoria non valido

Una delle applicazioni cercherà di accedere a un indirizzo di memoria a cui non ha diritti di accesso


Forse non si può, non lo so per certo. Qui, in questo thread https://forum.mql4.com/ru/3393 hanno scritto di GlobalAddAtom. Se ho capito bene, in questo modo una variabile può essere passata senza un file, cioè attraverso la memoria. Ma non so come fare((((


Hai anche fatto un esempio, puoi dirmi come hai cercato di farlo?

 

Oh, un pensiero mi è saltato in mente di nuovo - gli appunti di Windows sono accessibili in lettura-scrittura dalle applicazioni senza alcuna restrizione di indirizzo di memoria!

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

Ma ecco un altro piccolo bastone nella ruota:

La clipboard è controllata dall'utente. La finestra deve trasferire dati agli o dagli appunti solo in risposta a un comando dell'utente. La finestra non deve usare gli appunti per trasferire dati senza avvisare l'utente.

Quindi, solo l'API :^(

 
D500_Rised:

Oh, mi è venuto in mente di nuovo un pensiero: la clipboard di Windows è accessibile in lettura-scrittura dalle applicazioni senza alcuna restrizione di indirizzo di memoria!

Unaclipboard è un insieme di funzioni e messaggi che permette di trasferire dati ai programmi applicativi progettati utilizzando l'interfaccia di programmazione delle applicazioni( API) di Microsoft® Win32®. Poiché tutti i programmi applicativi hanno accesso agli appunti, i dati possono essere facilmente spostati tra le applicazioni o all'interno di un programma applicativo.

Ma ecco un altro piccolo bastone nella ruota:

La clipboard è controllata dall'utente. La finestra dovrebbe trasferire dati agli o dagli appunti solo in risposta a un comando dell'utente. La finestra non dovrebbe usare gli appunti per trasferire dati senza avvisare l'utente.

Quindi, solo l'API :^(

Sembra chiaro, ma come implementarlo, puoi essere più specifico?
 

O impari l'API di Win 32 da solo, o trovi un codificatore che accetti il lavoro. Non c'è molta scelta qui.

Ma secondo me, questo sistema non vale il costo.

 
gravity001:
zhuki:

Per la cronaca, se clicchi su terminal.exe 4 volte, si apriranno due copie dello stesso terminale, e i percorsi dovrebbero essere gli stessi.

Ho provato a cliccare, ma non ha funzionato. Sei sicuro che funzioni per te?
Ho provato di nuovo, apre due copie dello stesso terminale. Non l'ho inventato io, è un fatto noto.
 
Ecco la discussione https://forum.mql4.com/ru/9244#49606
Motivazione: