Benim yaklaşımım. Çekirdek - Motor. - sayfa 147

 

Genel olarak, görev neredeyse tanımlanmıştır.

  1. Danışmanın her bir kopyasının kendi kaynaklarından iki tanesini oluşturması gerekir - biri motora mesaj yazmak için, diğeri motordan mesajları okumak için.
  2. Motor, EA'nın kaç kopyasının farklı çiftlerde çalıştığını bulmak için kaynaklar arasında geçiş yapmalıdır.
  3. Motor, kullanıcının bağlantıyı değiştireceği, çalışan Uzman Danışmanların dinamik bir listesini oluşturacaktır.
  4. Ardından Motor, mesaj göndermek ve danışmanlardan mesaj almak için kaynakların adlarını kaydedecektir.

  1. Her EA normal şekilde çalışacak ve mesajlarını motora olağan şekilde kaydedecektir. Ancak motor bu mesajları yalnızca bu EA'ya bağlandıktan sonra okuyacaktır.
  2. Expert Advisor'a bağlantı olayında, Motor ona bir komut gönderecek ve ayrı ayrı parametre çekirdeğini kaynağa yazacaktır.
  3. Motor bu çekirdeği yükleyecektir. Ardından, GUI öğeleri arasında dolaşacak ve güncel bilgileri taşımaları için bunları yeniden çizecektir.
  4. Bundan sonra, Motor mesajlarını almak için kaynağındaki Uzman Danışmana mesajlarını yazacaktır.

Şu anda, tüm Uzman Danışmanlar Motora ortak bir kaynak üzerinden erişmektedir. Hedef, her Uzman Danışmanın Motor ile iletişim kurmak için ayrı bir kaynağa sahip olmasıdır. Ve motor, farklı Uzman Danışmanların kaynaklarını yeniden bağlayabilir.
 
Diyelim ki, motor altıncı ile çalışıyorsa, 5 danışmanın tüm iş paketlerini iletmesi kafamı karıştırıyor. Diğer beşinin iş bilgilerini iletmesini bir süre yasaklamak gerekiyor. Bırakın "havayı dinlesinler".
 
Oleg Papkov :
Diyelim ki, motor altıncı ile çalışıyorsa, 5 danışmanın tüm iş paketlerini iletmesi kafamı karıştırıyor. Diğer beşinin iş bilgilerini iletmesini bir süre yasaklamak gerekiyor. Bırakın "havayı dinlesinler".

Kabul ediyorum. Makul.

Bu, normal çalışacakları, ancak kaynağa mesaj yazmayacakları anlamına gelir. Yalnızca çekirdek parametrelerinin bir kopyasında. Ve bağlandıklarında, parametre çekirdeğini kaynağa yazacaklar ve Motor onu yükleyecektir. Bağlandıktan sonra EA, Motor için mesaj kaynağına mesajlar yazmaya başlayacaktır.

 

Bağlantı sorunu.

Motor, tüm Uzman Danışmanlar için küçük bir adres dizesi sunar. EA'daki aynı tanıma adresine sahip çekirdek geri çağrılır ve motor-EA'nın standart çalışması otomatik olarak başlar. Motorda başka bir Expert Advisor'a geçiş yapılırken, motor çalıştığı Expert Advisor'ın çekirdeğini o anki diğer Expert Advisor'lar gibi adres bekleme durumuna sokar. Böyle bir anda, tüm danışmanlar çözülür ve motorun ihtiyaç duyduğu başka bir danışman için motorun başka bir adres belirlemesini bekler.

Yeni Expert Advisor'ın özü, yanıt verir ve standart çalışma durumuna geçer. Hattın motor tarafından bir sonraki mesajına kadar işin bitimi ve bekleme durumuna geçiş. Sadece, Uzman Danışmanlar, standart değişime ek olarak, içindeki iş hattının sonu görünümü için akışı sürekli olarak analiz etmelidir. Değişim paketlerinin başında, motordan iletilen paketin kime adreslendiğini gösteren bir satır olmalıdır. Daha sonra çekirdek kontrol paketini alır ve belirli bir frekansta kendi durumunun paketlerini göndermeye başlar.

Geri kalanlar, her danışman için benzersiz bir tanımlama dizisi aracılığıyla iletişime geçilmeyi bekliyor. Geçiş yaparken, motor iş sonu dizisini mevcut EA'ya gönderir. EA herhangi bir şey göndermeyi durdurur ve aynı zamanda motorla alış-verişin standart çalışmasının başlangıcı olan kendi tanıma dizesini tanıma durumuna geçer.

 
Oleg Papkov :

Bağlantı sorunu.

Motor, tüm Uzman Danışmanlar için küçük bir adres dizesi sunar. EA'daki aynı tanıma adresine sahip çekirdek geri çağrılır ve motor-EA'nın standart çalışması otomatik olarak başlar. Motorda başka bir Expert Advisor'a geçiş yapılırken, motor çalıştığı Expert Advisor'ın çekirdeğini o anki diğer Expert Advisor'lar gibi adres bekleme durumuna sokar. Böyle bir anda, tüm danışmanlar çözülür ve motorun ihtiyaç duyduğu başka bir danışman için motorun başka bir adres belirlemesini bekler.

Yeni Expert Advisor'ın özü, yanıt verir ve standart çalışma durumuna geçer. Hattın motor tarafından bir sonraki mesajına kadar işin bitimi ve bekleme durumuna geçiş. Sadece, Uzman Danışmanlar, standart değişime ek olarak, içindeki iş hattının sonu görünümü için akışı sürekli olarak analiz etmelidir. Değişim paketlerinin başında, motordan iletilen paketin kime adreslendiğini gösteren bir satır olmalıdır. Daha sonra çekirdek kontrol paketini alır ve belirli bir frekansta kendi durumunun paketlerini göndermeye başlar.

Geri kalanlar, her danışman için benzersiz bir tanımlama dizisi aracılığıyla iletişime geçilmeyi bekliyor. Geçiş yaparken, motor iş sonu dizisini mevcut EA'ya gönderir. EA herhangi bir şey göndermeyi durdurur ve aynı zamanda motorla alış-verişin standart çalışmasının başlangıcı olan kendi tanıma dizesini tanıma durumuna geçer.

Kaynaklar biraz daha kolay. Orada bir adrese ihtiyacınız yok, sadece kaynağın adına ihtiyacınız var. Karmaşık bir modeliniz var. Her şey daha kolay.

Çekirdek sadece bir değerler dizisidir. Her Uzman Danışman, GUI öğelerinin parametrelerinin değerlerini kendisine yazar. Gerektiğinde, EA'lar parametre çekirdeğinin bir kopyasını bir kaynağa kaydedecek ve motor bunu okuyacak ve GUI'yi yeniden çizecektir.

Prensip olarak, bu basit bir iştir, ancak birçok küçük nüansı vardır. Örneğin, danışmanla iletişimin başlaması ve sona ermesiyle ilgili mesajlar. Sadece bir format bulmanız gerekiyor.


Bu arada, iletişimi hızlandırmayı ve frenlemeyi azaltmayı başardım. Ama frenlemenin sebebi sonuna kadar henüz anlaşılamadı. Yeniden çizerken ortaya çıkıyor, ancak garip olan şey, yeniden çizmenin kendisinin yavaşlamamasıdır. Ve bir kaynak aracılığıyla iletişim kurarken yeniden çizim yavaşlar. Nedeni henüz belli değil.

 

Zaman maliyetlerinin biraz izlenmesini koyun. Nerede yavaşladığını görmek için. Ve etrafta nasıl dolaşılır.

Belki biraz fazla karmaşıklaştırdım. Motorun içinde nasıl organize ettiğinizi bilmiyorum. Ben sadece mantığı kullandım.

 
Oleg Papkov :

Zaman maliyetlerinin biraz izlenmesini koyun. Nerede yavaşladığını görmek için. Ve etrafta nasıl dolaşılır.

Belki biraz fazla karmaşıklaştırdım. Motorun içinde nasıl organize ettiğinizi bilmiyorum. Ben sadece mantığı kullandım.

Mantık sizi konuya yaklaştırdı ve genel olarak doğru anlıyorsunuz.

Bugün frenlemenin nedenlerini bulmaya çalışacağım. Aşağıdakiler açıktır - yeniden çizmenin kendisi yavaşlamaz. Bir kaynak yazmak ve okumak da. Ve birlikte, - frenleme çıkıyor.

 
İzleme var mı, hangi operasyon ne kadar sürüyor? Sırayla gerçekleştirilmelidirler. Danışmanda, veri kaldırma ve motora gönderme, örneğin 30 ms'lik bir frekansla gerçekleştirilir. Motora bir akış gönderildiğinde, kabul etmeye hazır mı? Ya da ne yapıyor?
 
Oleg Papkov :
İzleme var mı, hangi operasyon ne kadar sürüyor? Sırayla gerçekleştirilmelidirler. Danışmanda, veri kaldırma ve motora gönderme, örneğin 30 ms'lik bir frekansla gerçekleştirilir. Motora bir akış gönderildiğinde, kabul etmeye hazır mı? Ya da ne yapıyor?

Şimdi her şeyi kontrol ediyorum.

Motor, 30 ms'lik bir frekansta, Uzman Danışmandan gelen mesajların kaynağını okur ve Uzman Danışman, aynı frekansta, Motordan gelen mesajların kaynağını okur. Aynı frekansta ikisi de birbirlerine (kaydedilecek bir şey varsa) mesajlarını kaydederler. Bütün bunlar yavaşlamıyor. Ayrıca, yeniden çizim kendi başına gecikmeye neden olmaz.

Ancak, Motor tarafında kaynağı yeniden çizme ve yazma/okuma birleştirilirse gecikme görünür. Nedeni hala belirsiz. Öğrendim.

 
Реter Konow :

Şimdi her şeyi kontrol ediyorum.

Motor, 30 ms'lik bir frekansta, Uzman Danışmandan gelen mesajların kaynağını okur ve Uzman Danışman, aynı frekansta, Motordan gelen mesajların kaynağını okur. Aynı frekansta ikisi de birbirlerine (kaydedilecek bir şey varsa) mesajlarını kaydederler. Bütün bunlar yavaşlamıyor. Ayrıca, yeniden çizim kendi başına gecikmeye neden olmaz.

Ancak, Motor tarafında kaynağı yeniden çizme ve yazma/okuma birleştirilirse gecikme görünür. Nedeni hala belirsiz. Öğrendim.

Bir uyumsuzluk olabilir: hem danışman hem de motor, 1- her ikisi de birbirine iletir, 2 - ikisi de alır, OnTimer döngüleri senkronize değildir. Normal çalışmanın rastgele senkronizasyon anını bekleyin. Belki bu yüzden?