Init() ve DeInit() yürütme sırası - sayfa 13

 
Andrey Dik :

...

Birkaç kişi, MT5'teki gösterge yürütme paradigması çerçevesinde tamamlanması sorunlu bir görevin belirli bir örneğini zaten istedi. Bir örnek olacak mı, olmayacak mı, parmaktan emilmeyecek mi?

Bir gösterge için gerçekten de önce init, sonra deinit gerçekleştirilir. Ancak zaman çerçevesi değiştirildiğinde, göstergenin ikinci örneği oluşturulur ve init, önceki (tablodan kaldırılan) örneğinin deinitinden daha önce yürütülebilir.

En belirgin örnek, zaman çerçevesini değiştirirken kullanıcı parametrelerini kaydetmektir - parametreleri deinit'te kaydederiz, onları init'te okuruz. Yeni örneğin başlangıcı, önceki örneğin tanımından daha önce çalıştıysa, parametreler kaydedilmez.

Pratikte, kaldırılan örneğin iptali, temelde yeni örneğin başlangıcından önce çalışır, ancak zaman çerçevesi çok hızlı değiştirilirse veya veriler yüklenirse, bir hata oluşur.

 
Slawa :

Ve şimdi tek bir olay sırası olmadığını, her sembol periyodu için bir sıra olduğunu hayal edin. Kaç karakter-dönem, çok sıra var.

Şimdi sıraların işlendiği sırayı önerin.

Sıra bende grafiğe eklenmelidir. Kullanıcı ister sembolü, TF'yi değiştirsin, ister sadece kapatsın, tüm göstergeler tamamen sonlandırılmalı, daha sonra uzmanlar, tüm komutların deins'de işlenmesiyle (ne yaparlarsa yapsınlar, global değişkenlere , dosyalara yaz, nesneleri sil, DLL ile etkileşime gir) , İnternet üzerinden bir şey gönderin) ve tamamlandıktan ve bellekten boşalttıktan sonra, yeni bir TF veya sembol üzerinde yeni örnekler başlatın, öncekiler hakkında hiçbir şey bilmeden, ancak önceki tarafından kaydedilen bilgileri doğru bir şekilde okuyabilir.

Belki biraz daha yavaş olacak, ama doğru olacak.

Ben programların hızlı ve yanlış değil, doğru çalışması taraftarıyım.

Yeni örneğin init'i daha erken başlarsa, o zaman deinit'in hiç gerekli olmadığı ve hatta programcıları yanlış yönlendireceği için zararlı olduğu ortaya çıkar, çünkü bir şeyi kurtaracaklarını umarlar ve sonra sayılırlar. Olduğu gibi bırakırsanız - o zaman yardıma ekleyin - bu işlevin sonuçları daha sonra bilinmeyecektir. örnek, yani böylece kimse bu f-ii'de bir şey yapmaz. Daha da iyisi, olayların doğal düzenini yapmak çok zorsa ve sizden yüzlerce saatlik çalışma gerektirecekse kaldırın.

 
Slawa :

Zaman çerçevesi geçişi azalırsa, önce alt (yeni) zaman diliminde OnInit, ardından daha yüksek (eski) zaman diliminde OnDeinit.

Anahtar yükselirse, bunun tersi doğrudur. İlk olarak, alt (eski) zaman diliminde OnDeinit ve ardından daha yüksek (yeni) zaman diliminde OnInit.

Burada önbelleklerin alt zaman diliminden eskisine doğru işlendiğini unutmamanız gerekir.

Çok garip bir mantık! Nasıl olunur? DeInit'te diske herhangi bir parametre yazılırsa, bu, bir Junior TF'de başlatılmış olsa bile, göstergenin bir sonraki başlangıcında OnInit'te okunması ve alınması gerekir.

Muhtemelen kısa testi yazmak, kontrol etmek için gereklidir. Aslında, daha genç bir TF'ye geçiş olursa ve daha yüksek bir TF'ye geçiş yapılırsa, mantık öldürülecek, o zaman her şey yolunda gidecek.

Genel olarak, Uzman Danışmanlarda statik değişkenler harikayken, statik değişkenlerin göstergelerde kaydedilmemesi üzücü.
 
Ihor Herasko :

1. Masaüstü uygulamalarına ne diyorsunuz? Görünüşe göre MT5 bir masaüstü uygulaması değil...

2. Bunu uydurmuyorum. Bu, mevcut başlığın konusu. Mesele şu ki, MT5'te henüz DeInit'i tamamlamamış olan göstergenin Init'inin ilk önce yürütülebileceği ortaya çıkıyor. Olur olmaz. Konuyu okumadın mı?

3. Aynı dosyayı saniyede birkaç kez güncellemeye çalışın ve duygularınızı paylaşın.

4. Peki ya 1 ismine yapılan ekleme? Mesele şu ki, ekranda aynı anda aynı göstergeden grafik nesneler var, ancak bunun farklı kopyaları var. Teknik olarak bir çatışma yok. Çakışma, eski kopya silinene kadar ekranda leapfrog gören kullanıcı tarafından gözlemlenecektir.

5. Büyük bir sırrı ifşa edeceğim: Terminalin bir kopyası için DLL'nin bir kopyası var. Bunların birden fazla kopyasını kullanamazsınız.

1. MT5'ten değil, işletim sisteminde değil, özel korumalı bir ortamda yürütülen göstergelerden (komut dosyaları ve Uzman Danışmanların yanı sıra) bahsediyoruz.

2. Kendinizle çelişiyorsunuz. Yeniden hesaplama çok hızlı gerçekleşirse (saniyede birkaç kez), göstergenin yeni bir kopyasında yeni bir yeniden hesaplama yapmak sorun olmaz. Bu durumda, belirli bir süre sonra birikmiş verileri periyodik olarak sıfırlamak mantıklıdır (bunun için bir ontimer veya özel bir sayaç kullanabilirsiniz). Ve hesaplamalar uzunsa, mücbir sebep durumunda kayıplarını önlemek için hesaplamalardan sonra verileri kaydetmek gerekir (anne fişi "fono yapmamak için" prizden çıkardı) .

3. Eski kopya, bir saniyeden daha kısa sürede ve onunla birlikte grafik nesneleri silinecektir. Hangi moron, TF'yi titreşecek kadar sık değiştirecek? - yine de böyle bir aptal aramanız gerekiyor ve her aptala nefes almayacaksınız.

4. Peki ne? dll meşgul olabilir, bu normaldir. Bunda yanlış bir şey yok, örneğin isteği bir saniye içinde tekrarlamanız gerekiyor.

Gördüğünüz gibi, herhangi bir sorun yok, sadece MT terminalindeki programlarla, bunların masaüstü uygulamaları olmadığını ve özel bir güvenli ortamda yürütüldüğünü hatırlayarak doğru bir şekilde çalışmanız gerekiyor.

 
Dmitry Fedoseev :

Bir gösterge için gerçekten de önce init, sonra deinit gerçekleştirilir. Ancak zaman çerçevesi değiştirildiğinde, göstergenin ikinci örneği oluşturulur ve init, önceki (tablodan kaldırılan) örneğinin deinitinden daha önce yürütülebilir.

En belirgin örnek, zaman çerçevesini değiştirirken kullanıcı parametrelerini kaydetmektir - parametreleri deinit'te kaydederiz, onları init'te okuruz. Yeni örneğin başlangıcı, önceki örneğin tanımından daha önce çalıştıysa, parametreler kaydedilmez.

Pratikte, kaldırılan örneğin iptali, temelde yeni örneğin başlangıcından önce çalışır, ancak zaman çerçevesi çok hızlı değiştirilirse veya veriler yüklenirse, bir hata oluşur.

İşte yine burada... Neden "zaman çerçevesini çok hızlı değiştir"?! Aranızda "Güç düğmesine hızlıca basarak" bilgisayarı açan (veya kapatan) biri var mı?
 
Andrey Dik :
Yine burada... Neden "zaman çerçevesini çok hızlı değiştirelim"?! Aranızda "Güç düğmesine hızlıca basarak" bilgisayarı açan (veya kapatan) biri var mı?

Ve ne? Ceza kanunu mu yasaklıyor yoksa anayasa mı?
 
Dmitry Fedoseev :

Ve ne? Ceza kanunu mu yasaklıyor yoksa anayasa mı?

Ceza Kanunu pek çok şeyi yasaklamaz, örneğin parmakları prize sokmak.

Nesnelerin titremeye başlaması için TF'leri çok hızlı değiştirme ihtiyacına bir örnek verin. - hipnotik etki örneği vermeyin, çünkü bu daha etkili yöntemlerle elde edilebilir.

 
Andrey Dik :

Ceza Kanunu pek çok şeyi yasaklamaz, örneğin parmakları prize sokmak.

Nesnelerin titremeye başlaması için TF'leri çok hızlı değiştirme ihtiyacına bir örnek verin. - hipnotik bir etki örneği vermeyin, çünkü bu daha etkili yöntemlerle elde edilebilir.

Çünkü fişli priz aptallar değil aklı başında tasarımcılar tarafından tasarlandı . Voltaj tarafında fiş değil priz vardır. Ayrıca çıkıştaki delikler parmağınızı sokamayacağınız çaptadır. Ancak bunu evde istediğiniz şekilde yapabilirsiniz - fişlerin duvardan dışarı çıkmasına ve prizlerin kablolara asılmasına izin verin. Sonuçta, her şeyi anlıyorsunuz ve duvardan dışarı çıkan çatallara elinizle dokunmayacaksınız.
 
Dmitry Fedoseev :
Çünkü fişli priz aptallar değil aklı başında tasarımcılar tarafından tasarlandı. Voltaj tarafında fiş değil priz vardır. Ayrıca çıkıştaki delikler parmağınızı sokamayacağınız çaptadır. Ancak bunu evde istediğiniz şekilde yapabilirsiniz - fişlerin duvardan dışarı çıkmasına ve prizlerin kablolara asılmasına izin verin. Sonuçta, her şeyi anlıyorsunuz ve duvardan dışarı çıkan çatallara elinizle dokunmayacaksınız.

TAMAM. Soketlerle başarısız bir örnek.

O zaman bir tane daha alalım - balkondan atlayalım! İngiltere balkondan atlamayı yasaklıyor mu? - Numara? - O zaman neden adrenalini yükseltmek için çalışmıyorsun?

Herhangi bir hedefe aklı başında yollarla ulaşılmalıdır, aksi takdirde hedefler çılgınca olur.

 
Dmitry Fedoseev :

Andrey Dik :

Nesnelerin titremeye başlaması için TF'leri çok hızlı değiştirme ihtiyacına bir örnek verin. - hipnotik etki örneği vermeyin, çünkü bu daha etkili yöntemlerle elde edilebilir.