MQL'de asenkron ve çok iş parçacıklı programlama - sayfa 14
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Gerçekten o kadar tehlikeli mi? Bellek boşaltmada hatalar...
Örnek, Windows'ta cihaz bağlamını ve tahsis edilen kaynakları yakalamanın genel ilkeleriyle ilgilidir, bağımsız iş parçacıkları programlarken geliştirici, işletim sistemi tarafından gerektiğinde cihaz bağlamını ve kaynakları serbest bırakmayı garanti etmelidir, geliştirici düşük seviyeli komutlar kullanırsa, kullandığı tüm kaynakları serbest bırakın ... burada, genel olarak, tekrar yazdığım ana kadar - googled bilgisini "Merhaba Dünya" kullanarak bir kez yazın https://www.mql5.com/en/forum/318593/ page5#comment_12572558 ve çok şey anlayacaksınız, işin %99'unun sizin için sistem programcıları tarafından yapıldığını anlayacaksınız
onlar. MQL ortamında çalışmak - bu sizin için Metaquote programcıları tarafından yapıldı - MQL programının yetersiz çalışması durumunda terminalin kararlı çalışmasını sağladılar
Çoklu iş parçacığı - bir görev birden çok iş parçacığında çalışır. Tek bir işlemci üzerinde çalışabilirler, hepsi aynı, işlemci zaman kotalarının bitiminden sonra çoklu iş parçacığı ve aralarında geçiş olacaktır. Paylaşılan kaynaklara erişmek için senkronizasyon gerektir. Kilitlenme, yarış durumu, bellek sürümündeki hatalar ve diğer "sürprizlerle" doludur.
Asenkron - işlevlerin bloke olmadan yürütülmesi (yani, yöntem çıktıktan hemen sonra kontrol geri döner), genellikle diğer cihazlarda (ağ ekipmanı, depolama cihazları, çevresel cihazlar, vb.) Örneğin, yüksek performanslı çok kullanıcılı bir sunucu yazabilirsiniz. istemci bağlantılarını işlemek için yalnızca bir iş parçacığı ve bir durum makinesi kullanmak. Her şey bu sunucunun amacına bağlıdır.
Sizin durumunuzda, WinAPI kullanarak çok sayıda bağlantı oluşturmanız gerekiyor ve örneğin zamanlayıcı iş parçacığını tutmamak için bu bağlantıların durumunu WaitForMultipleObjects aracılığıyla bir zaman aşımı ile kontrol edebilirsiniz.
not. Teorik olarak IOCompletionPort'u kullanabilirsiniz, ancak daha fazla bilgi ve net tasarım gerektirir.Şey, şey... birbirinizi buldunuz.
Bilgilendirici cevap için teşekkürler :)
Peki, açıklayalım, bize ne olduğunu ve nerede olduğunu söyle.
Ve normal yollarla Eventloop ile asenkron kod nasıl yazılır?
Her şey belgelerde.
Yeni başlayanlar için okuyun ve bir şeyler yazmaya çalışın.
Ve işe yaramazsa, forumda sorabilirsiniz.
Şimdilik, konuşacak bir şey yok.
Her şey belgelerde.
Yeni başlayanlar için okuyun ve bir şeyler yazmaya çalışın.
Ve işe yaramazsa, forumda sorabilirsiniz.
Şimdilik, konuşacak bir şey yok.
Sizce tema ne için yaratıldı?
Bize asenkron kodu yerel yollarla nasıl yazacağımızı söylüyorsunuz ve bunu belgelerde gösteriyorsunuz.
İstekleri eşzamansız olarak göndermeye ek olarak, Geri Çağırma işlevlerinin nerede olduğunu, EventLoop denetiminin nerede olduğunu, Wait'in nerede olduğunu vb. gösterin.
Buna bir cevap veremeyeceğinize eminim çünkü kullanıcılar için bu işlevsellik yok ve bu da dock'larda yok.
İşte bu, konuşacak bir şey yok, burada iletişim konusunu anlayan Andrey Pogoreltsev konusunda tek bir kişi var.
Roman , 2019.07.27 09:30
Sizce tema ne için yaratıldı?
Çoklu kullanım hakkında soru sordunuz. O değil.
Ama bu şu anda endişelenmen gereken bir şey değil.
Roman , 2019.07.27 09:30
Bize asenkron kodu yerel yollarla nasıl yazacağımızı söylüyorsunuz ve bunu belgelerde gösteriyorsunuz.
İstekleri eşzamansız olarak göndermeye ek olarak, Geri Çağırma işlevlerinin nerede olduğunu, EventLoop denetiminin nerede olduğunu, Wait'in nerede olduğunu vb. gösterin.
Buna bir cevap veremeyeceğinize eminim çünkü kullanıcılar için bu işlevsellik yok ve bu da dock'larda yok.
İşte bu, konuşacak bir şey yok, burada iletişim konusunu anlayan Andrey Pogoreltsev konusunda tek bir kişi var.
Sana bunların hepsini gösterebilirim. Peki ya anlamı?
İhtiyacın olsaydı, kendin bulurdun.
Çoklu kullanım hakkında soru sordunuz. O değil.
çoklu iş parçacığı, olduğu gibi, https://www.mql5.com/en/docs/runtime/running , yani. görevi paralelleştirmek, birkaç tablo açmak (ne yazık ki, Hizmetlerin yeteneklerini henüz kullanmayı denemedim - belki onlarla daha da kolay olur?) ve uzmanlarımızı ayrı başlıklarda asmak istiyoruz, sonra çözüyoruz senkronizasyon ve veri alışverişi sorunu (görevler)
TS'ye beş kez sordum - ticaret terminalinin neden buna ihtiyacı var ... bilmiyor, çünkü ne belirli bir görev ne de bir hedef yok
Uygulamayı yalnızca ticaret terminalinin görevleri için tipik olmayan istemci-sunucu uygulamalarında görüyorum, belki birinin sunucuya istatistik göndermesi uygun olabilir? - genel olarak, hazır bir örnek (makale) zaten yazılmıştır https://www.mql5.com/ru/articles/5337
Kaynak kodu okunabilir ve makale mükemmel kalitede, kaynak kodu birkaç iş parçacığında paralel hesaplamalar yapmak için değiştirilebilir .... ne düşüneceğimizi bulmak için kalır? )))
Örnek, Windows'ta cihaz bağlamını ve tahsis edilen kaynakları yakalamanın genel ilkeleriyle ilgilidir, bağımsız iş parçacıkları programlarken geliştirici, işletim sistemi tarafından gerektiğinde cihaz bağlamını ve kaynakları serbest bırakmayı garanti etmelidir, geliştirici düşük seviyeli komutlar kullanırsa, kullandığı tüm kaynakları serbest bırakın ... burada, genel olarak, tekrar yazdığım ana kadar - googled bilgisini "Merhaba Dünya" kullanarak bir kez yazın https://www.mql5.com/en/forum/318593/ page5#comment_12572558 ve çok şey anlayacaksınız, işin %99'unun sizin için sistem programcıları tarafından yapıldığını anlayacaksınız
onlar. MQL ortamında çalışmak - bu sizin için Metaquote programcıları tarafından yapıldı - MQL programının yetersiz çalışması durumunda terminalin kararlı çalışmasını sağladılar
Eh, tartışmıyorum, ikna oldum. Akışlarla uygun şekilde bağımsız çalışma, kendi kendini yetiştirmiş kodlayıcıların gücünün ötesinde olabilir ve kritik hatalara yol açabilir. Maçlar çocukların oyuncakları değildir. Ancak, bir program içinde bir şekilde çoklu iş parçacığına ulaşmanız gerekir.
Sonuçta, burada basit mantık yeterlidir: hizmetlerin sıralı başlatılması hatalara neden olmaz ve her hizmet kendi iş parçacığında çalışır. Bu, mekanizmanın zaten kurulmuş ve hata ayıklanmış olduğu anlamına gelir. İyi. Bir adım öne geçmemiz gerekiyor: Özeldeki Expert Advisor koduna bu hizmetleri yazın. modüller. Her modül aynı hizmet olacaktır. Ardından, bu modülleri sırayla derleyin ve aynı anda çalıştırın. Herşey.
Esasen hiçbir şey değişmez. Danışman kodunun içine sadece hizmetler yazılacaktır. Derlenecek ve aynı zamanda çalışacak. EA grafikten kaldırıldığında yok edilir. Expert Advisor'ın çoklu iş parçacığını bu şekilde elde ederiz.