Hata ayıklama bilgilerini zaten günlüğe kaydediyorum.
Belirsiz bir döngü göremiyorum.
Günlük dosyasında gördüğüm son şey, start() öğesinin son satırında return() öğesini çağırdığım zamandır.
Oradan start() bir daha asla tetiklenmez.
Başka bir şey olmalı.
Biliyorum, FileWrite(), FileFlush ile kendi PrintDebug() işlevimi kullanıyorum.
Hata ayıklama bilgilerini yazdırma yöntemimin yeterli olduğunu düşünüyor musunuz?
Hata ayıklama bilgilerini zaten günlüğe kaydediyorum.
Belirsiz bir döngü göremiyorum.
Günlük dosyasında gördüğüm son şey, start() öğesinin son satırında return() öğesini çağırdığım zamandır.
Oradan start() bir daha asla tetiklenmez.
Başka bir şey olmalı.
Günlüğe start() öğesinin ilk satırı olarak bir şey yazdırıyor musunuz?
Evet, ilk satırı ve son satırı kaydediyorum.
Günlüğe kaydetme yöntemimin hiçbir günlük bilgisini kaçırmadığından emin olabilir miyim?
Evet, ilk satırı ve son satırı kaydediyorum.
Günlüğe kaydetme yöntemimin hiçbir günlük bilgisini kaçırmadığından emin olabilir miyim?
iCustom() çağrıları aracılığıyla herhangi bir Gösterge kullanıyor musunuz? Bunu yaparsanız, belki de CPU döngülerini alıyorlardır. . .
İşte günlük işlevim:
void PrintDebug( int F, string DebugStr1, string DS2 = "" , string DS3 = "" , string DS4 = "" , string DS5 = "" , string DS6 = "" , string DS7 = "" , string DS8 = "" , string DS9 = "" , string DS10 = "" , string DS11 = "" , string DS12 = "" , string DS13 = "" , string DS14 = "" , string DS15 = "" , string DS16 = "" , string DS17 = "" , string DS18 = "" , string DS19 = "" , string DS20 = "" ) { FileWrite (F, CommonIdentStr() + Blank + DebugStr1 + DS2 + DS3 + DS4 + DS5 + DS6 + DS7 + DS8 + DS9 + DS10 + DS11 + DS12 +DS13 + DS14 + DS15 + DS16 + DS17 + DS18 + DS19 + DS20); FileFlush (F); }
Ve işte benim başlatma fonksiyonum:
int start() { int TFInd; int k; if (CheckDebug(DebugStart, 2 )) { DebugStr = "DebugStart: " + "begin: " + " InitialGapFound: " + BoolToString(InitialGapFound); PrintDebug(DebugFile, DebugStr); } if (InitialGapFound) { if ( TimeLocal () >= LastInitialGapCloseCheck + HistoryDownloadCheckInterval) // zzz { LastInitialGapCloseCheck = TimeLocal (); if (InitialHistoryGapClosed()) { if (CheckDebug(DebugStart, 2 )) { DebugStr = "DebugStart: " + " InitialHistoryGapClosed " ; PrintDebug(DebugFile, DebugStr); } ReInit = true ; InitialGapFound = false ; MyInit(); } } if (CheckDebug(DebugStart, 2 )) { DebugStr = "DebugStart: " + " last return in InitialGapFound" ; PrintDebug(DebugFile, DebugStr); } return (OK); } // if InitialGapFound if (CheckDebug(DebugStart, 2 )) { DebugStr = "DebugStart (): last return: " ; PrintDebug(DebugFile, DebugStr); } return ( 0 ); }
Başlangıcı ve bitişi kaydediyorum.
CheckDebug() işlevinin herhangi bir etkisi yoktur, çünkü her zaman true değerini döndürür.
Oluşturulan günlük dosyası aşağıdadır.
Son girişin, start() işlevinde yürütülen son ifade olan "DebugStart: InitialGapFound'daki son dönüş" olduğunu görebilirsiniz.
Günlük dosyasındaki sonraki giriş , start() işlevinin ilk ifadesi olan "DebugStart: start: ..." olmalıdır.
Ancak start() bir daha asla tetiklenmez. Bunun yerine MT4 bir döngüde kalıyor.
Program mantığımda herhangi bir döngü göremiyorum. DLL kullanmıyorum, iCustom yok, ...
2013.11.15 12:33:14 Test azaltıldı 0: USDJPY M15 Hata Ayıklama Başlatma() başlıyor:
2013.11.15 12:33:14 Test azaltıldı 0: USDJPY M15 DebugMyInit başlıyor:
2013.11.15 12:33:14 Test azaltıldı 0: USDJPY M15 Hata Ayıklama Başlatma() dönüşü:
2013.11.15 12:33:14 Test azaltıldı 0: USDJPY M15 DebugStart: start: InitialGapFound: True
2013.11.15 12:33:14 Test azaltıldı 0: USDJPY M15 DebugStart: InitialGapFound'da son dönüş
2013.11.15 12:33:15 Test azaltıldı 395052: USDJPY M15 DebugStart: start: InitialGapFound: True
2013.11.15 12:33:15 Test azaltıldı 395052: USDJPY M15 DebugStart: InitialGapFound'da son dönüş
2013.11.15 12:33:16 Test azaltıldı 395052: USDJPY M15 DebugStart: start: InitialGapFound: True
2013.11.15 12:33:16 Test azaltıldı 395052: USDJPY M15 DebugStart: InitialHistoryGapClosed
2013.11.15 12:33:16 Test azaltıldı 395052: USDJPY M15 DebugMyInit başlıyor:
2013.11.15 12:33:16 Test azaltıldı 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 1 nach CreateHistory()
2013.11.15 12:33:17 Test azaltıldı 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 2 nach CreateHistory()
2013.11.15 12:33:18 Test azaltıldı 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 3 nach CreateHistory()
2013.11.15 12:33:19 Test azaltıldı 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 4 nach CreateHistory()
2013.11.15 12:33:20 Test azaltıldı 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 5 nach CreateHistory()
2013.11.15 12:33:21 Test azaltıldı 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 6 nach CreateHistory()
2013.11.15 12:33:22 Test azaltıldı 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 7 nach CreateHistory()
2013.11.15 12:33:22 Test azaltıldı 395052: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 8
2013.11.15 12:33:22 Test azaltıldı 395052: USDJPY M15 DebugStart: InitialGapFound'da son dönüş
İşte benim günlük fonksiyonum:
Ve işte başlatma fonksiyonum:
Başlangıcı ve bitişi kaydediyorum.
CheckDebug() işlevinin herhangi bir etkisi yoktur, çünkü her zaman true değerini döndürür.
Oluşturulan günlük dosyası aşağıdadır.
Son girişin, start() işlevinde yürütülen son ifade olan "DebugStart: InitialGapFound'daki son dönüş" olduğunu görebilirsiniz.
Günlük dosyasındaki sonraki giriş, start() işlevinin ilk ifadesi olan "DebugStart: start: ..." olmalıdır.
Ancak start() bir daha asla tetiklenmez. Bunun yerine MT4 bir döngüde kalıyor.
Ne tamamdır. . .
return (OK);
Hata ayıklamanızın soruna neden olduğunu varsayalım, lütfen start() çalıştırmasındaki değişken bildirimlerinden sonra aşağıdakileri ekleyin ve yukarıdaki gibi günlüğü ve günlük alıntınızı göstererek geri bildirin. . .
int start() { int TFInd; int k; Print ( "start(): started . . ." ); // <----- add this line here if (CheckDebug(DebugStart, 2 ))

- Ücretsiz alım-satım 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
Merhaba,
Burada çirkin bir sorunla karşı karşıyayım:
birkaç yinelemeden sonra göstergemin start() işlevi return() çağrısından sonra tekrar geri gelmiyor, yani MT4 bir döngüde kalıyor, tekrar start()'ı çağırmadan CPU'yu tüketiyor.
Merak ediyorum, bir şekilde işlev çağrısı yığınını yok ettim mi?
Nedeni bulmak için esas olarak ne aramamı önerirsiniz?
Zaten bütün hafta hata ayıklıyordum. 72 sayfa kod var.
Herhangi bir DLL çağrısı kullanmıyorum, sadece MQL düzlemi.
teşekkürler.