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

 
Andrey Dik :

Neyse gelelim ağıtlara...

Sıradan masaüstü uygulamalarında tam olarak neyin bulunmadığını soruyorsunuz.

Uygulamalarda ne eksik? Senkronizasyon? )))

Geliştiriciler zaten kutudan çıkmış tüm bu hileleri yapmasaydı, MQL program yazarları, güvenlik ve yürütme hızı sorunları olsun, masaüstü geliştirmenin tüm cazibeleriyle sürekli olarak karşılaşacaklardı.

Bazı sözde bilimsel akıl yürütme gerçekler olmadan gitti. MT4'te göstergeler, birbirini izleyen OnInit() ve DeInit() ile mükemmel şekilde çalışır. Aynı zamanda, bir dezavantaj var - tüm göstergelerin tek bir iş parçacığında çalışması. MT5'te de gerekli olan göstergenin doğru yazılmasıyla çözülür. MT5'te bundan çok uzaklaşmamış olmalarına rağmen, aynı şekilde, bir grafiğin göstergeleri tek bir iş parçacığında çalışmaya devam ediyor.
 
Ihor Herasko :

1. Uygulamalarda neler eksik? Senkronizasyon? )))

2. Bazı sözde bilimsel akıl yürütme, gerçekler olmadan gitti. MT4'te göstergeler, sıralı OnInit() ve DeInit() ile mükemmel çalışır . Aynı zamanda, bir dezavantaj var - tüm göstergelerin tek bir iş parçacığında çalışması. MT5'te de gerekli olan göstergenin doğru yazılmasıyla çözülür. MT5'te bundan çok uzaklaşmamış olmalarına rağmen, aynı şekilde, bir grafiğin göstergeleri tek bir iş parçacığında çalışmaya devam ediyor.

1. Ne senkronizasyonundan bahsediyorsunuz?!

2. MT4'te, gösterge kodunun yürütülmesinin bir parçası olarak, önce init, ardından deinit gerçekleştirilir, başka neye ihtiyacınız var?! MT5 ile aynı.


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?

 
Andrey Dik :

1. Ne senkronizasyonundan bahsediyorsunuz?!

Interthread hakkında. Bir iş parçacığı sonlandırılıncaya kadar (sonlandırma komutu verilen), diğeri başlamaz. Veya, tüm bunlar tek bir iş parçacığında gerçekleşirse, o zaman daha da basittir: "eski" TF ile ilişkili tüm programların yürütülmesini tamamlarız ve ancak bundan sonra programları "yeni" TF'de başlatırız.

2. MT4'te, gösterge kodunun yürütülmesinin bir parçası olarak, önce init, ardından deinit gerçekleştirilir, başka neye ihtiyacınız var?! MT5 ile aynı.

Doğru. MT4'te her şey tamamen aynıdır. Ancak MT5'te öyle değil. Konunun konusu bu.

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?

Hatta önceki gün hazırlıksız olarak üç örnek verdi. Onları görmüyor musun?
 
Andrey Dik :

Bu doğru, yapmamalılar. Pekala, örneğin Total Commander'ı çalıştırın. Neden Microsoft'tan Windows'un op.memory'de TC kopyalarının "doğru" boşaltma/yükleme sırasına bakmasını talep ediyorsunuz? Bu bir işletim sistemi endişesi mi?

İşletim sisteminin endişesi, TC'nin diğer TC'lere müdahale etmemesi ve orada bellekte yaptıkları, dosya alışverişi veya daha samimi bir şey - bu onların işi, programları.

"Bence de!" (c) Mimino, 1977

Total Commander'ın bununla ne ilgisi var? Doğrudan sistem kaynakları üzerinde çalışması anlamında oldukça düşük seviyeli bir yardımcı programdır. Bir MQL programı söz konusu olduğunda, MT platformunun görevi, uygulama programlayıcısını senkronizasyon gibi sistem sorunlarından mümkün olduğunca kurtarmaktır - bu platform herkes için daha verimli ve tek bir hamlede sağlayabilir. MQL programcılarının fiyat teklifi analizi ve ticaret stratejileri hakkında düşünmesi gerekir. MT'nin amacı budur.

Dosya ve veri alışverişinin bununla ne ilgisi var? Bir MQL programı bağlamında işin mantığını düşünün. Şimdi mesele şu ki, hiçbir şeyi değiş tokuş etmeyecek, sadece OnInit / OnDeinit olaylarını amaçlanan amaçları için kullanmaya çalışıyor - bazı durumlardan doğru bir şekilde başlamak ve durum kaydetme ile kendini doğru bir şekilde tamamlamak. Bunun için uygun değillerse, daha önce belirtildiği gibi, ne için? Savunucuların argümanlarına bakılırsa - içeride bir tef ile dans etmeye çalışmak ve önce ve sonra başka hangi kopyaların yapıldığını ve hangi zaman diliminden ve hangisine geçtiklerini öğrenmek için? Bu, MQ'nun elde etmek istediği şeyin tam tersi bir etkidir - bir kopyanın diğeri hakkında hiçbir şey bilmediği.

Bir kopyanın hiçbir şey bilmemesi ve öğrenmesi gerekmemesi ve aynı zamanda yan etkiler olmadan çalışması için, çekirdeğin tüm kopyaları bilmesi gerekir - hem tamamlanmış hem de başlayanlar - ve onlar için zarif işleme sağlamalıdır init /deinit olayları standart kuyruk metaforunda . Terminal zaten tüm kopyaların kaydını tutar ve olay kuyruğunu kullanır, ancak init/deinit bir nedenden dolayı olay mantığını ihlal eder.

 
Stanislav Korotky :

Bir kopyanın hiçbir şey bilmemesi ve öğrenmesi gerekmemesi ve aynı zamanda yan etkiler olmadan çalışması için, çekirdeğin tüm kopyaları bilmesi gerekir - hem tamamlanmış hem de başlayanlar - ve onlar için zarif işleme sağlamalıdır. /deinit olayları standart kuyruk metaforunda . Terminal zaten tüm kopyaların kaydını tutar ve olay kuyruğunu kullanır, ancak init/deinit bir nedenden dolayı olay mantığını ihlal eder.

Kabul ediyorum.
 
Andrey Khatimlianskii :

Dönemi ch'de saklamak için sorun nedir? değişken?

Göstergenin farklı zaman dilimlerinde art arda başlatılması arasında bir dizi veriyi aktarmak neden gerekli olabilir?


Andrey, ben genel uçbirim değişkenlerini sevmiyorum. Onlarla (uzun bir süre olsa da) denedim ve hızları ve senkronizasyon karmaşıklığı konusunda çok hayal kırıklığına uğradım. Asılsız olmamak için, hızlarını gösteren bir örnek (biraz sonra) yazmaya çalışacağım. Belki bir şeyler çoktan değişti ve ben yanılıyorum. Ancak küresel değişkenler hakkında sevmediğim şey, kendi ayrı hayatlarını yaşamaları ve kesinlikle halka açık olmaları. Herkes onları F3'e basarak görebilir ve tutamaçlarla silebilir. Birkaç tane olduğunda, o kadar da kötü değil, ama herkes onları kullanmaya başlarsa, kişisel olarak masada bir dağınıklık gibi hissetmeye başlıyorum.

Dizileri aktarma pahasına. Evet, buna sık sık gerek olmadığına katılıyorum. Ancak burada, örneğin, belirli bir örnek benim göstergemdir . Dahili çalışması seçilen TF'ye bağlı değildir, çünkü başlatma sırasında, tüm TF'leri (neredeyse tümü) yükler ve kendi ortak dizisini (logaritmik tırnak dizisi gibi bir şey) oluşturur ve buna dayalı birkaç dizin dizisi daha olmak üzere oldukça büyük hesaplamalar da yapılır. TF'yi her değiştirirken, aynı hacimsel işi yapmak tamamen mantıksızdır, TF'yi değiştirirken frenleme olacaktır. Kafamda hala uygulayacağım örüntü tanıma algoritmaları var, bu yüzden başlatma hesaplamaları birkaç saniyeye ulaşabilir ve bunun sadece bir kez olmasını ve unutmasını istiyorum.

Демонстрация индикатора ChannelsProf
Демонстрация индикатора ChannelsProf
  • 2016.02.27
  • www.youtube.com
Скоро на экранах ваших мониторов новый индикатор для MT5 ChannelsProf.
 
Stanislav Korotky :

Bir kopyanın hiçbir şey bilmemesi ve öğrenmesi gerekmemesi ve aynı zamanda yan etkiler olmadan çalışması için, çekirdeğin tüm kopyaları bilmesi gerekir - hem tamamlanmış hem de başlayanlar - ve onlar için zarif işleme sağlamalıdır. /deinit olayları standart kuyruk metaforunda . Terminal zaten tüm kopyaların kaydını tutar ve olay kuyruğunu kullanır, ancak init/deinit bir nedenden dolayı olay mantığını ihlal eder.

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.

 
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.

Kuyruk, pencerenin bir özelliğidir. Karakter periyodu başına bir kuyruk, arayüz olayları için doğru değildir. O zaman fare tıklamalarıyla nasıl başa çıkıyorsunuz?
 
Ihor Herasko :

1. Interthread hakkında. Bir iş parçacığı sonlandırılıncaya kadar (sonlandırma komutu verilen), diğeri başlamaz. Veya, tüm bunlar tek bir iş parçacığında gerçekleşirse, o zaman daha da basittir: "eski" TF ile ilişkili tüm programların yürütülmesini tamamlarız ve ancak bundan sonra programları "yeni" TF'de başlatırız.

2. Doğru. MT4'te her şey tamamen aynıdır. Ancak MT5'te öyle değil. Konunun konusu bu.

3. Önceki gün hazırlıksız olarak Grafik nesnelerle çalışırken . Genel olarak, güzellik ortaya çıkıyor: bir gösterge hala var ve kendinden sonra temizlenmedi ve ikincisi bu nesnelerin üzerine çiziyor. Bu yüzden kullanıcıya şunu açıklayacağız: "TF'yi değiştirirken kısa süreli parazit gözlemleyeceksiniz." )))
  • DLL ile çalışmak. Deinit ile DLL, oluşturduğu tüm iş parçacıklarını kesmelidir. Bundan sonraki göstergenin bir sonraki kopyası, bunları kendisi için yeniden oluşturur. Şimdi, göstergenin yeni bir kopyasının tüm bu dizileri oluşturmaya çalışacağını ve hala çalıştıkları için reddedileceğini anlıyoruz. Yeni gösterge bir hata mesajı verecek ve çalışmayacaktır. Sadece TF'yi değiştirdiğim için. Evet, sorun çözüldü.
  • 1) Daha önce yazdığım gibi yapmanız gerekiyor: biriken veritabanı periyodik olarak bir dosyaya veya başka bir depoya kaydedilmelidir, sorun yok - dosyayı açın, yazın, kapatın. Bunu, init ve deinit'te değil, bu verileri her güncellediğinizde veya periyodik olarak yapmanız gerekir. (Bir program yazarken, bir makale yazarken periyodik olarak iş biriktirirsiniz). Ve bir dosyaya yazmama hatasını garanti etmek imkansızdır, bazen güvenlik ağı için kritik durumlarda bunu yaparlar: güncellenen bilgi yeni bir dosyaya yazılır, başarılı bir yazmadan sonra eskisi silinir ve yenisi eskisiyle olduğu gibi isim değiştirilir.

    2) Ayrıca zaten açıklanmıştır. Her gösterge kendi grafik nesneleri ile çalışmalıdır. Doğal olarak, zaten nesnelerin varlığını kontrol etmeniz ve zaten varsa, isme 1 eklemeniz gerekir.

    3) Eh, çözülebilecekleri kendileri zaten yazdılar.

    Ve bu hiç sorun değil. Bu, programların normal çalışmasıdır - benzersiz nesnelerin oluşturulması, birikmiş bilgilerin periyodik olarak kaydedilmesi, tamamlandıktan sonra kendini temizleme.

     
    Andrey Dik :

    1. Bunlar sizin İstek Listeniz. Ancak masaüstü uygulamalarının çalışma şeklini istediğinizi ve istediğiniz gibi masaüstü uygulamalarının çalışmadığını söylediniz.

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

    2. Hikaye uydurmayın. Hem MT4 hem de MT5'te onit ve ondeinit'in yürütme sırası aynıdır. Programın deinit ile başlayacağı diye bir şey yok.

    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. Tamam, örneklere bakalım:

    1) Daha önce yazdığım gibi yapmanız gerekiyor: biriken veritabanı periyodik olarak bir dosyaya veya başka bir depoya kaydedilmelidir, sorun yok - dosyayı açın, yazın, kapatın. Bunu, init ve deinit'te değil, bu verileri her güncellediğinizde veya periyodik olarak yapmanız gerekir. (Bir program yazarken, bir makale yazarken periyodik olarak iş biriktirirsiniz). Ve bir dosyaya yazmama hatasını garanti etmek imkansızdır, bazen güvenlik ağı için kritik durumlarda bunu yaparlar: güncellenen bilgi yeni bir dosyaya yazılır, başarılı bir yazmadan sonra eskisi silinir ve yenisi eskisiyle olduğu gibi adı değiştirilir.

    Aynı dosyayı saniyede birkaç kez güncellemeyi deneyin ve deneyiminizi paylaşın.

    2) Ayrıca zaten açıklanmıştır. Her gösterge kendi grafik nesneleri ile çalışmalıdır. Doğal olarak, zaten nesnelerin varlığını kontrol etmeniz ve zaten varsa, isme 1 eklemeniz gerekir.

    Adına 1 eklemeye ne dersiniz? 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.

    3) Eh, çözülebilecekleri kendileri zaten yazdılar.

    Ve bu hiç sorun değil. Bu, programların normal çalışmasıdır - benzersiz nesnelerin oluşturulması, birikmiş bilgilerin periyodik olarak kaydedilmesi, tamamlandıktan sonra kendini temizleme.

    Size büyük bir sır vereceğim: Terminalin bir kopyası için DLL'nin bir kopyası var. Bunların birden fazla kopyasını kullanamazsınız.