İyi. İlk ben. :)
Doğru, en "büyülü" yerler oldukça yavaştır - ama... mql5 sihirbazlarından biri biraz sonra hızlandırmanın bir yolunu bulabilir mi?// Ne kadar yavaşladıklarını kendiniz görebilirsiniz, test sadece işin hızını ölçmeye adanmıştır.
Bu kod, iki boyutlu dizileri kullanmak için olağan sözdizimine göre çalışır.
void OnStart () { float FA[ 5 ][ 3 ]; long st= GetTickCount (); for ( int t= 0 ;t< 1000000 ;t++) { for ( int i= 0 ;i< 5 ;i++) { for ( int j= 0 ;j< 3 ;j++) { FA[i][j] = (i+ 1.5 )*(j+ 1.3 ); } } } Print ( "====" , GetTickCount ()-st, " ms ====" ); st= GetTickCount (); C2DMagicArray MA( 5 , 3 ); for ( int t= 0 ;t< 1000000 ;t++) { for ( int i= 0 ;i<MA.SizeL();i++) { for ( long j= 0 ;j<MA.MaxR();j++) { MA[i][j] = (i+ 1.5 )*(j+ 1.3 ); // ^ ^ Как это сделано ??? Можете повторить ? :)) } } } Print ( "====" , GetTickCount ()-st, " ms ====" ); st= GetTickCount (); for ( int t= 0 ;t< 1000000 ;t++) { for ( int i= 0 ;i<MA.SizeL();i++) { for ( long j= 0 ;j<MA.MaxR();j++) { MA.Set(i,j, float ((i+ 1.5 )*(j+ 1.3 ))); } } } Print ( "====" , GetTickCount ()-st, " ms ====" ); for ( int i= 0 ;i<MA.SizeL();i++) { for ( int j= 0 ;j<MA.MaxR();j++) { Print ( MA[i][j] ); // ^ ^ Как это сделано??? :)) Жду Вашу версию ! } } }
Henüz kodu derleyemeyeceksiniz: kapsayıcılar daha sonra olacak... - aksi halde o kadar ilginç olmayacak. :)
Peki, kim başarıyı tekrarlayabilir?
Vladimir bizden cevap beklerken benim de ustalığı hak eden bir sorum var ;)
Bir ex5'te 32 ve 64 DLL'den işlevleri nasıl içe aktarabilirim ?
Diyelim ki iki (32/64) terminal için bir ex5 yapalım.
- www.mql5.com
Vladimir bizden cevap beklerken benim de ustalığı hak eden bir sorum var ;)
32 ve 64 DLL'lerin işlevlerinin bir ex5'e aktarıldığından nasıl emin olabilirim?
Diyelim ki iki (32/64) terminal için bir ex5 yapalım.
Yine bir istisna mı istiyorsun?
Hayır, asla istisna istemedim. Ve muhtemelen onlarla ilgili değil. #ifdef'e daha yakın
Vladimir, aşırı işlem yükünü kodla sonlandırmayı başarırsa, belki de yönteminin gerekli DLL'leri otomatik olarak dahil etmek için uygun olacağını umuyordum o_O
#define içinde bir tür #import
İyi. İlk ben. :)
Peki, kim başarıyı tekrarlayabilir?
Belgelerde benzer bir örnek verilmiş olmasına rağmen, bir şey uzun süre başarınızı tekrarlamıyor :) .
//--- перебираем строки для сложения for ( int i= 0 ;i<rows;i++) { //--- запишем результаты сложений строк матриц в массив for ( int k= 0 ;k<cols;k++) { arr[k]= this [i][k]+m[i][k]; } //--- поместим массив в строку матрицы res[i]=arr; }
Belgelerde benzer bir örnek verilmiş olmasına rağmen, bir şey uzun süre başarınızı tekrarlamıyor :) .
Peki, bu benzetmeye göre yapın ... iş bir şey! ... :-))
Ve bir bakacağım. ;)
32 ve 64 DLL'lerin işlevlerinin bir ex5'e aktarıldığından nasıl emin olabilirim?
Diyelim ki iki (32/64) terminal için bir ex5 yapalım.
Fonksiyonlar farklı şekilde adlandırılır. Ve kodda, terminalin bitliğine bağlı olarak koşullu çağrılar yapın, farklı işlevlere erişin.
Bana öyle geliyor ki, terminal ilk çağrıda DLL'yi yüklüyor. Çağrı yok - indirme girişimi yok ve kritik bir düşük.
Henüz başka bir yol göremiyorum. Terminal bitliği, TerminalInfoInteger() değerini döndürür
bool x64 = TerminalInfoInteger (TERMINAL_X64);
Bütün bunlar doğrudan MyLib.ex5 kitaplığında yapılabilir.
void MyLibMultibitFunc() // библиотечная универсальная обёртка для DLL-функции { if (x64) { MyDll64Func(); } else { MyDll32Func(); } }
Fonksiyonlar farklı şekilde adlandırılır. Ve kodda, terminalin bitliğine bağlı olarak koşullu çağrılar yapın, farklı işlevlere erişin.
Bana öyle geliyor ki, terminal ilk çağrıda DLL'yi yüklüyor. Çağrı yok - indirme girişimi yok ve kritik bir düşük.
Henüz başka bir yol göremiyorum. Terminalin bitliği TerminalInfoInteger() tarafından döndürülür.
Bütün bunlar doğrudan MyLib.ex5 kitaplığında yapılabilir.
Evet, ayrıca terminalin yalnızca ilk çağrıda bir dll işlevi nesnesi oluşturduğu görüşünde.
ve bitlik ile ilgili olarak, forumda sayıların farklı temsilinden bahsedilmiş gibi görünüyor, eğer bit alanı bir değişiklikle sonuç verirse, ancak 32, diğeri 64 ise, o zaman 32 olacaktır. Ampirik olarak belirleyebilirsiniz.
Fonksiyonlar farklı şekilde adlandırılır. Ve kodda, terminalin bitliğine bağlı olarak koşullu çağrılar yapın, farklı işlevleri çağırın.
Bana öyle geliyor ki, terminal ilk çağrıda DLL'yi yüklüyor. Çağrı yok - indirme girişimi yok ve kritik bir düşük.
Hayır beyler, sorunu anlamıyorsunuz. TERMINAL_X64 veya _Is64 ile olasılıklar bilinmektedir.
Ancak ne yazık ki terminal farklı şekilde yapıyor.
- çizelgeye atıldığında, kullanılan DLL'lerin listesini kontrol eder ve Bağımlılıklar penceresinde içe aktarılan işlevlerin listesini görüntüler.
Bit ile eşleşmeyen DLL'lerde MQL5\Libraries\somedll64.dll' uyarısı 32-bit sürüm değil yazıyor.
- ve sonra Tamam'a bastığınızda ve Uzman Danışman başladığında, işte pusu sizi burada bekliyor.
terminal 193 hatası veriyor ve EX5'i kaldırıyor
EX5 yüklenemedi
Ve kodda yalnızca bir DLL bildirimi olduğuna ve ondan hiçbir işlevin içe aktarılmadığına dikkat etmek istiyorum.
#import "somedll64.dll"
#içe aktarmak
- www.mql5.com
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Burada, bunun gibi her türlü "imkansızlık" mql5'i yayınlamayı ve analiz etmeyi öneriyorum: Koşullu derleme .
Meraklı insanlara eziyet etmek ve okuyucunun kendi yaratıcılığını teşvik etmek için önce özelliği ( uygulamayı açıklamadan ) gösterebilirsiniz.
Ama nihayetinde , sırrı ortaya çıkarmak ve örnek bir uygulama sağlamak (zorunlu!) gereklidir.
Tabii ki, böyle bir "iki aşamalı" form aldatmacalarla doludur, ancak "pazara cevap vermeye" hazır sihirbazların dürüst ifadelerine güveneceğim. :)
--
Öyleyse........ BAŞLA!