İki MT4 terminali arasında veri alışverişi? - sayfa 3

 
granit77 :
goldtrader : Bir EA'nın bir dosyayı yazmak için açması ve dosya henüz kapanmamışken başka bir EA'nın okumak için açması (veya açmaya çalışması) bir çakışma durumu değil mi?
Bana bilimin gücüne güvenen biri olarak durum biraz dramatik görünüyor. En az on kişiyi okuyabilirsiniz ve yazı yazmak için bayrak vb yasaklayan çekler kullanılabilir.Bu tamamen teknik bir konudur ve bir engel değildir, herhangi bir yerden dosyalar uzun zamandır API kullanılarak okunup yazılmıştır. Daha önce kullanılmayan terminaller arasında bilgi aktarmanın diğer yolları ilginçtir. Örneğin, bilgileri Windows ortam değişkeni olarak iletin.
Kabul ediyorum. Ayrıca dosya olmadan veri aktarımı yapmak istiyorum, bu yüzden daha hızlı ve daha güvenilir. Ama şu ana kadar bu konuda bir şey diyen yok sanırım, bu yüzden herkes bir dosya üzerinden aktarmaya kafayı takmış durumda (((
 
goldtrader :
yerçekimi001 :

Bir EA her zaman dosyaya yazdığından ve diğer EA her zaman bu dosyadan okuduğundan ve hangi sırayla gerçekleştiği önemli olmadığından sorun yok. Verilerin alaka düzeyini kontrol etmek için yerel saati kullandım, yani. alıntılar her 100 milisaniyede bir kaydedilir ve ardından alaka düzeyi yerel saatte kontrol edilir.


Bir Expert Advisor bir dosyayı yazmak için açtığında ve dosya henüz kapanmamışken başka bir Expert Advisor dosyayı okumak için açtığında (veya açmaya çalıştığında) bu bir çakışma durumu değil midir?
Hayır, çakışma değil, çünkü en azından dosya yazmaya açık olsa bile okuyabilirsiniz. Şimdi, aynı dosya aynı anda 2 kez kayıt için açılsaydı, o zaman bir çakışma olurdu.
 
zhuki :

Bilgi için, terminal.exe'ye 4 kez tıklarsanız, aynı terminalin 2 kopyası açılır ve orada yollar aynı olmalıdır.

Basmaya çalıştım, başaramadım. Gerçekten işinize yarıyor mu?
 
gravity001 :

Ayrıca dosya olmadan veri aktarımı yapmak istiyorum, bu yüzden daha hızlı ve daha güvenilir. Ama şu ana kadar bu konuda bir şey diyen yok sanırım, bu yüzden herkes bir dosya üzerinden aktarmaya kafayı takmış durumda (((

Ve ne, 2 uygulama için erişim hakkı ile hafızada bir yer ayırmak mümkün mü?

Bu aynı zamanda, bu tür hataların kışkırtılmasıyla açık bir çatışma gibidir:




0009 0x0009 Kontrol bellek bloğunun geçersiz adresi

0998 0x03E6 Bir bellek adresine erişim için geçersiz girişim

Uygulamalardan biri, erişim haklarına sahip olmadığı bir bellek adresine erişmeye çalışacak.


 
D500_Rised :
yerçekimi001 :

Ayrıca dosya olmadan veri aktarımı yapmak istiyorum, bu yüzden daha hızlı ve daha güvenilir. Ama şu ana kadar bu konuda bir şey diyen yok sanırım, bu yüzden herkes bir dosya üzerinden aktarmaya kafayı takmış durumda (((

Ve ne, 2 uygulama için erişim hakkı ile hafızada bir yer ayırmak mümkün mü?

Bu aynı zamanda, bu tür hataların kışkırtılmasıyla açık bir çatışma gibidir:




0009 0x0009 Kontrol bellek bloğunun geçersiz adresi

0998 0x03E6 Bir bellek adresine erişim için geçersiz girişim

Uygulamalardan biri, erişim haklarına sahip olmadığı bir bellek adresine erişmeye çalışacak.


Belki değil, kesin olarak bilmiyorum. Burada, bu başlıkta https://forum.mql4.com/ru/3393 GlobalAddAtom hakkında yazmışlar. Eğer doğru anladıysam, bu şekilde dosyası olmayan bir değişkeni aktarabilirsiniz, yani. hafıza yoluyla. Ama nasıl yapacağımı bilmiyorum


Bir örnek verdin, nasıl yapmaya çalıştığını söyle?

 

Ah, düşünce yine kafamda uçuştu.Vindos panosu, bellek adreslerine başvurmadan uygulamaları okumak ve yazmak için kullanılabilir!

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

Ama işte çarkta başka bir küçük çubuk:

Pano kullanıcı tarafından kontrol edilir. Bir pencere, yalnızca kullanıcıdan gelen bir komuta yanıt olarak panoya veya panodan veri aktarmalıdır. Bir pencere, kullanıcıyı bilgilendirmeden veri aktarmak için panoyu kullanmamalıdır.

Yani sadece API :^(

 
D500_Rised :

Ah, düşünce yine kafamda uçuştu.Vindos panosu, bellek adreslerine başvurmadan uygulamaları okumak ve yazmak için kullanılabilir!

Pano ( pano ) - Microsoft® Win32® Uygulama Programlama Arayüzü ( API ) kullanılarak geliştirilen uygulama programlarına veri aktarımını mümkün kılan bir dizi işlev ve mesaj. Tüm uygulama programlarının panoya erişimi olduğundan, veriler uygulamalar arasında veya bir uygulama programı içinde kolayca taşınabilir.

Ama işte çarkta başka bir küçük çubuk:

Pano kullanıcı tarafından kontrol edilir. Bir pencere, yalnızca kullanıcıdan gelen bir komuta yanıt olarak panoya veya panodan veri aktarmalıdır. Bir pencere, kullanıcıyı bilgilendirmeden veri aktarmak için panoyu kullanmamalıdır.

Yani sadece API :^(

Anlaşılır görünüyor, ancak nasıl uygulanır, daha spesifik olabilir misiniz?
 

Win 32 API'sini kendi başınıza öğrenin veya devralacak bir kodlayıcı arayın. Buradaki seçim harika değil.

Ama bence, bu sistem maliyete değmez.

 
gravity001 :
zhuki :

Bilgi için, terminal.exe'ye 4 kez tıklarsanız, aynı terminalin 2 kopyası açılır ve orada yollar aynı olmalıdır.

Basmaya çalıştım, başaramadım. Gerçekten işinize yarıyor mu?
Bir kez daha aynı terminalin 2 kopyasını açmaya çalıştım, bunu kendim bulmadım, bu bilinen bir gerçek.
 
İşte tartışma https://forum.mql4.com/en/9244#49606
Neden: