Hatalar, hatalar, sorular - sayfa 2540
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
Ne istiyorsun?
böylece sizin gibi beceriksiz insanlar, Fedoseev vb. yorumları ile böcekler ve tasarımlar tartışmasına girmesin.
böylece MQL'de bir bütün olarak C++'dan alınan ve C++'dakiyle aynı görünen yapılar ve mekanizmalar, C++'dakiyle aynı şekilde çalışır.
MQL'nin tam bir C++ analogu olması için mi?
Ve bu konuda sızlanmayı ve sümük köpürmeyi kes. Bu tür "tartışmalar" için ayrı bir konu açtım.
sadece sen ağla. nasıl elde ettikleri, ayrı bir dil ve ayrı bir dal hakkında.
kendine ve sempati duyanlara ve Nuh'a ayrı bir şube aç.
Terminali mqd dosyasını serbest bırakmaya nasıl zorlayabilirim? Ya da onu arayüzden kaldırmanın düzenli bir yolu olsaydı daha mı iyi olurdu?
Sorunun ne hakkında olduğunu kabaca tahmin ediyorum. Daha iyi yeniden formüle edin.
Ancak, diğer tüm işlemlerin ek tamamlanmasından sonra aşağıdaki işlevleri yürütmek için döngüden çıkmak için zaman yok.
Ve Fn() işlevinin kendisini tamamlayın.
DestroyFunction(); bu örnekte bir test görevi görür.
dll içeriği
Programın İçeriği Hizmet.
_StopFlag bayrağında ek bir gecikme yardımcı olmaz.
Bence Hizmetlerde dll sıfırlama ile ilgili bir sorun var, çözmeme yardım edin.
dll hizmetin bitiminden hemen sonra (zorunlu olarak) boşaltılmıyor (yanılıyor olabilirim)
her durumda, DLL_PROCESS_DETACH ile yaptığınız şey zaten çok geç. Bu bayrağı ayarlayacak ve hizmet sona erdiğinde açıkça çağrılacak olan dll'de açık bir tanımlama işlevi yapın.
Terminal, akış start() işlevinden döndükten sonra lib'i boşaltmaya başlayacak, sanırım. Ve nasıl çalışır? Program çalışıyor ve bunun için çevreyi bozmaya mı başladınız? Bu saçmalık. Komut dizisini bir döngüde takip etmek yerine lib'de ayrı bir iş parçacığı çalıştırın ve şimdi normal şekilde tamamlayabilir.
Terminal, akış start() işlevinden döndükten sonra lib'i boşaltmaya başlayacak, sanırım. Ve nasıl çalışır? Program çalışıyor ve bunun için çevreyi bozmaya mı başladınız? Bu saçmalık. Kitaplıkta ayrı bir iş parçacığı başlatın ve şimdi normal şekilde tamamlayabilecektir.
İşin aslı, iş parçacıkları ile aynı sorun ve bu nedenle, yok edilmesi gereken bir grup nesneye sahip diğer işlemleri (iş parçacığı) doğru şekilde sonlandıramıyorum.
Bu nedenle, kontrol etmek için yukarıda basit bir örnek yaptım ve sorunun tamamen farklı olduğu ortaya çıktı.
Terminal DLL_PROCESS_DETACH çıkış noktasıyla düzgün çalışmıyor
TheXpert tarafından önerildiği gibi deneyeceğim, ancak terminalin DLL_PROCESS_DETACH ne olursa olsun dll'yi hemen kaldırması gerçeği muhtemelen bir terminal hatasıdır.
dll hizmetin bitiminden hemen sonra (zorunlu olarak) boşaltılmıyor (yanılıyor olabilirim)
her durumda, DLL_PROCESS_DETACH ile yaptığınız şey zaten çok geç. Bu bayrağı ayarlayacak ve hizmet sona erdiğinde açıkça çağrılacak olan dll'de açık bir tanımlama işlevi yapın.
Bahşiş için teşekkürler, deneyeceğim.
İşin aslı, iş parçacıkları ile aynı sorun ve bu nedenle, yok edilmesi gereken bir grup nesneye sahip diğer işlemleri (iş parçacığı) doğru şekilde sonlandıramıyorum.
Bu nedenle, kontrol etmek için yukarıda basit bir örnek yaptım ve sorunun tamamen farklı olduğu ortaya çıktı.
Terminal DLL_PROCESS_DETACH çıkış noktasıyla düzgün çalışmıyor
TheXpert'in önerdiği gibi deneyeceğim, ancak terminalin DLL_PROCESS_DETACH'den bağımsız olarak dll'yi hemen kaldırması gerçeği muhtemelen bir terminal hatasıdır.
Bahşiş için teşekkürler, deneyeceğim.
Ve dll'nin ayrı bir iş parçacığında yaşadığı fikrini nereden aldınız? Programın, döngü koşullarında işlenmemiş, banal bir acil durum sonlandırmasına sahipsiniz.
Ve DLL_PROCESS işlemine bir dll bağlandığında / bağlantısı kesildiğinde ve bu DLL_THREAD işleminde oluşturulan bir iş parçacığı oluşturulduğunda / sonlandırıldığında DllMain başlatılır. Bu nedenle, bool Detach'iniz, dll'nin içinde bile var olduğu gerçeği değil, çünkü derleyici optimizasyonun bir parçası olarak kaldırabilir, çünkü dll'nin ömrü boyunca tüm işlevlerin yürütülmesi sırasında değişmez ve false değerine eşittir. .
Ve dll'nin ayrı bir iş parçacığında yaşadığı fikrini nereden aldınız? Programın, döngü koşullarında işlenmemiş, banal bir acil durum sonlandırmasına sahipsiniz.
Ve DLL_PROCESS işlemine bir dll bağlandığında / bağlantısı kesildiğinde ve bu DLL_THREAD işleminde oluşturulan bir iş parçacığı oluşturulduğunda / sonlandırıldığında DllMain başlatılır. Bu nedenle, bool Detach'iniz, dll'nin içinde bile var olduğu gerçeği değil, çünkü derleyici optimizasyonun bir parçası olarak kaldırabilir, çünkü dll'nin ömrü boyunca tüm işlevlerin yürütülmesi sırasında değişmez ve false değerine eşittir. .
Hiçbir yerde dll'nin ayrı bir iş parçacığında yaşadığı söylenmedi.
Konuşan Vict ve bendik ve ne hakkında konuştuğumuzu anladık ))
Kilitlenmenin anlaşılabilir olması, DLL_PROCESS_DETACH içindeki bayrağın while döngüsünden çıkmak için neden çalışmadığı açık değildir.
DLL_THREAD gelince, mql için hiç mevcut değiller, bu bu makalede yazılmıştır, kontrol ettim, gerçekten çalışmıyorlar.
Ancak bir seçenek olarak VS derleyicisi ile komik de olabilir.
Yetkili temsilcilerin açıklamalarını duymak istiyorum ve tahmin değil))
Bence Hizmetlerde dll sıfırlama ile ilgili bir sorun var, çözmeme yardım edin.
Ancak, diğer tüm işlemlerin ek tamamlanmasından sonra aşağıdaki işlevleri yürütmek için döngüden çıkmak için zaman yok.
Ve Fn() işlevinin kendisini tamamlayın.
DestroyFunction(); bu örnekte bir test görevi görür.
dll içeriği
Programın İçeriği Hizmet.
_StopFlag bayrağında ek bir gecikme yardımcı olmaz.
Ne normal bir son!
Böyle bir davranışa ihtiyacınız varsa, o zaman DLL'deki Fn içinde, ayrı bir FnStop işlevinde ayarlanmış bir bayrak tarafından durdurulabilen bir döngü ile ayrı bir iş parçacığı başlatmanız gerekir ve DLL_PROCESS_DETACH