Olayların akışı. Boşta bir olay nasıl kontrol edilir ve yapılır? (+ karar verildi) - sayfa 2

 

Yedelkin :

Buna göre, terminalin olay kuyruğunu aşmamaları için kullanıcı olaylarının ne sıklıkta gönderilmesi gerektiği hala net değil...

Yazılarımı okumadığın çok açık.
 
Yedelkin :

Şu soruya cevap bulamıyorum: Olay kuyruğunun taşması RAM'in boyutunu nasıl etkiler? Olay kuyruğu doluysa kuyruğu taşan olaylar nereye gidiyor? "Tarih dışı" olduğu ortaya çıkan olaylar için ayrılan RAM'in bir kısmı serbest mi kalıyor?

Belki sorularım terminolojik olarak tutarlı değildir, ancak (umarım) sorunun özünü aktarır.

Kuyruk dinamiktir ve gerektiği gibi büyür.

Ancak belirli bir sınırda, kuyruğu daha fazla yüklemenin bir anlamı olmadığı açık olduğundan, yeni olaylar atılır.

 
sergeev :
Yazılarımı okumadığın çok açık.

Neden "okumadım"? Sen kendi problemini çözdün, ben de farklı bir planla benimkini çözmeye çalışıyorum. Tartışmayı okuduğumda, sorularıma cevap bulamadım.

Asıl soruma cevap vermedin. :/ Bu tam olarak "hemen görüldü" :)

 
Renat :

Kuyruk dinamiktir ve gerektiği gibi büyür.

Ancak belirli bir sınırda, kuyruğu daha fazla yüklemenin bir anlamı olmadığı açık olduğundan, yeni olaylar atılır.

Peki, sıra "dinamik". Belirli "belirli" sınırlara yükselir. Ama neden kimse görünüşte basit bir soruya cevap veremiyor: Olay kuyruğunun taşması RAM'in boyutunu nasıl etkiler ?

Takip eden sorular: Taşan bir olay kuyruğunu "içermek" için ne kadar RAM gerekir? "Belirli bir sınırda yeni olaylar atılırsa", bu atılan olaylar için daha önce tahsis edilen RAM serbest bırakılır mı?

Soruların amacı, kullanıcı olaylarının akışının terminal tarafından tüketilen RAM'in boyutunu nasıl artırabileceğini (arttırabileceğini) anlamaktır.

 
Yedelkin :

Olay kuyruğu dolu ise kuyruğu taşan olaylar nereye gidiyor? "Tarih dışı" olduğu ortaya çıkan olaylar için ayrılan RAM'in bir kısmı serbest mi kalıyor?

Belki sorularım terminolojik olarak tutarlı değildir, ama (umarım) sorunun özünü aktarır.

Yürütme Programları bölümü , sıra taştığında yeni olayların atıldığını söylüyor:

İstemci terminali, ortaya çıkan olayları ilgili açık grafiklere gönderir. Olaylar ayrıca tablolar ( tablo olayları ) veya mql5 programları ( kullanıcı olayları ) tarafından da oluşturulabilir. Bir grafikte grafik nesneleri oluşturmak ve silmek için olayların oluşturulması, CHART_EVENT_OBJECT_CREATE ve CHART_EVENT_OBJECT_DELETE grafik özellikleri ayarlanarak etkinleştirilebilir ve devre dışı bırakılabilir. Her mql5 programı ve her çizelge, yeni gelen tüm olayların eklendiği kendi olay kuyruğuna sahiptir.

Program olayları yalnızca üzerinde çalıştığı grafikten alır. Tüm olaylar alındıkları sıraya göre birbiri ardına işlenir. Kuyrukta zaten bir NewTick olayı varsa veya bu olay işleniyorsa, yeni NewTick olayı mql5 programının kuyruğuna konmaz. Benzer şekilde, ChartEvent olayı zaten mql5 programının kuyruğundaysa veya böyle bir olay işleniyorsa, bu türden yeni bir olay kuyruğa alınmaz.

Olay kuyruklarının sınırlı ancak yeterli bir boyutu vardır, bu nedenle iyi yazılmış bir programın kuyruğu aşması pek olası değildir. Kuyruk dolduğunda, yeni olaylar sıraya alınmadan atılır.

Olay işleme için sonsuz döngülerin kullanılması kesinlikle önerilmez. Bu kuralın tek istisnası, tek bir Start olayını işleyen komut dosyalarıdır.

Kitaplıklar herhangi bir olayı işlemez.

 
Yedelkin :

Neden "okumadım"? Sen kendi problemini çözdün, ben de farklı bir planla benimkini çözmeye çalışıyorum. Tartışmayı okuduğumda, sorularıma cevap bulamadım.

Asıl soruma cevap vermedin. :/ Bu tam olarak "hemen görüldü" :)


Sorunuz "kuyruğun taşmaması için kullanıcı olaylarının yaklaşık olarak ne sıklıkta gönderilmesi gerektiğidir"

ilk sayfadaki cevabım "OnChartEvent'i arama sıklığı ile".


Yani, bir olay - bir OnChartEvent. Arada ikiden fazla olay olmamalıdır.

Bütün matematik bu.

tekrar ilk sayfayı okuyun. Bir kullanıcı olayı yerine bir terminal olayı işlendiğinde kullanıcı olaylarının birikmesinden nasıl kaçınılacağını gösterdim. Her şey basit.

 
Yedelkin :

Soruların amacı , kullanıcı olaylarının akışının terminal tarafından tüketilen RAM'in boyutunu nasıl artırabileceğini (arttırabileceğini) anlamaktır.

Ne için? Evet, artıyor. Sorunun fiyatı birkaç megabayttır.

Sorun bu değil ya da hiç değil.

 
Rosh :

Bölüm, Programları Yürütme diyor ki...:

1. El Kitabı bölümünde önemli değişiklikler yapılmıştır.

1.1. Örneğin, eskiden şöyleydi: " İstemci terminali ortaya çıkan tüm olayları ortak bir kuyruğa koyar. Böylece olaylar geldikleri sıraya göre birbiri ardına işlenir. İstisna NewTick olayıdır. Zaten böyle bir durum varsa olay kuyrukta veya bu olay işleme durumundaysa, yeni olay NewTick kuyruğa alınmadı ".

Şimdi: " Program olayları yalnızca başlatıldığı tablodan alır. Tüm olaylar geldikleri sıraya göre birbiri ardına işlenir . Kuyrukta zaten bir NewTick olayı varsa veya bu olay işleme durumundaysa, daha sonra yeni NewTick olayı mql5 program kuyruğuna eklenir Benzer şekilde, ChartEvent olayı zaten mql5 programının kuyruğundaysa veya böyle bir olay işleniyorsa, bu türden yeni bir olay sıraya alınmaz ".

Söylediği gibi, "Farkı hissedin". En azından uyarırlardı. :/ Bu değişiklik, kullanıcı olaylarıyla çalışma yaklaşımını temelden değiştirir. Gözleme.

1.2. Daha ileri. Olayları ıskartaya çıkarma ilkesi alt üst olmuştur. Eskiden şöyleydi: "Olay kuyruğunun boyutu sınırlıdır. Sıra dolduğunda, yeni gelen olaylara yer açmak için eski olaylar işlenmeden silinir."

Şimdi: "Sıra taştığında, yeni olaylar sıraya alınmadan atılır." Dedikleri gibi, teşekkürler: en alakalı kullanıcı olaylarını kaybediyoruz.

2. El Kitabının alıntılanan bölümü ana sorularıma cevap vermiyor: Olay kuyruğunun taşması RAM boyutunu nasıl etkiler? Taşan bir olay kuyruğunu "tutmak" için ne kadar RAM gerekir? "Belirli bir sınırda yeni olaylar atılırsa", bu atılan olaylar için daha önce tahsis edilen RAM serbest bırakılır mı?

 

TheXpert :

Yedelkin :

Soruların amacı , kullanıcı olaylarının akışının terminal tarafından tüketilen RAM'in boyutunu nasıl artırabileceğini (arttırabileceğini) anlamaktır.

Ne için? Evet, artıyor. Sorunun fiyatı birkaç megabayttır.

Garip soru: "Neden?" - Cevap veriyorum: sonuç çıkarmak için anlamak.
 
Yedelkin :

2. El Kitabının alıntılanan bölümü ana sorularıma cevap vermiyor: Olay kuyruğunun taşması RAM boyutunu nasıl etkiler? Taşan bir olay kuyruğunu "tutmak" için ne kadar RAM gerekir? "Belirli bir sınırda yeni olaylar atılırsa", bu atılan olaylar için daha önce tahsis edilen RAM serbest bırakılır mı?

Bu tür sorunlar ortaya çıkarsa, her şey çok kötüdür. Bence bellek sorunlarını aramak için son yer taşan bir olay kuyruğu.

Olay atılırsa, sıraya alınmaz. Hafıza gelişmez.