Forex programozás › Fórum › Kérdések az MQL4 programozási nyelvvel kapcsolatban › Fordítási optimalizáció?
-
SzerzőBejegyzés
-
Szia Radu!
Olvastam a könyvet de nem emlékszem rá, hogy le van-e írva.
Az mql4-ben van „Complete Boolean Evaluation Directive” fordítási optimalizáció, vagy nincs?
pl:
if (a==true || lassu_muvelet()==true)Más nyelveken ha ez be van kapcsolva akkor a fordító nem ellenerőzi le a feltétel mind két paraméterét, hanem igaznak veszi mert, az első feltétel már igaz így nem kell ellenőrizni a másodikat mert már nem fogja befolyásolni a végeredményt. Ez akkor lehet hasznos ha a második feltétel sokkal lassabb kiértékelésű lenne, és nincs mindig szükség a lefuttatására.
A lassu_muvelet() függvény mindenképpen le fog futni az „a” feltétel teljesülésétől függetlenül, így mindenképpen érdemes azt beágyazni. Én legalábbis jelentős optimalizációt értem el ily módon.
Köszönöm!
Pont ezért kérdeztem én is.Szia!
Ezt az ún. fordítási optimalizáltságot, hogyan lehet mérni illetve elérni.Kicsit olvasgattam. Elvileg a ki lehet nyerni a valós időt teszt közben is, ám nekem nem működik. Továbbra is a teszt kezdeti időértéket és a tesztvégi időértéket kapom vissza.
Nem tudjátok mi a hiba?
http://forum.mql4.com/9900#400075Valamint érdekelne az is, hogy két tick között mennyi idő alatt futhat le. Ezt hogy tudnám elérni?
header részbe:
int sumTime, sumTimeCount;
start() rész legelejére:
int startTime = GetTickCount();
[robot kódja, minden feladat, ami csak van]
start() rész végére:
int tTime = GetTickCount() - startTime; sumTimeCount++; sumTime += tTime;
És végül a deinit() részbe:
Print (StringConcatenate("Összes futásidő: ", sumTime, " ezredmp. / ", DoubleToStr(sumTime / 1000, 2), " mp (", sumTimeCount, " db futás)"));
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.