MT4がハングアップし、start()を再度呼び出さない - ページ 4

 

私はRaptorと同意見で、誰かが本当に助けになる唯一の方法は、あなたが関連するコードを投稿することです。

 

申し訳ありませんが、コードを掲載することはできません。72ページもあり、製品の コードなので、リリースする予定です。

その間に、私はWHRoederが最初の回答で提案したログコールを実装しました。

MicrosoftのdbgViewで見ることができるデバッグ情報を書いています。

このデバッグ情報は、私自身のデバッグ情報と全く同じものです。

これは、ログファイルに書かれていることが信頼できるものであることを示しています。

さて、ログファイルには、start()が終了したが、もうトリガーされないことが書かれています。

これは、start()の中で呼び出されるCreateHistory()で行われている作業量と関係があるようです。

init()の中で同じCreateHistory()を呼び出すと、全く同じ量の作業が問題なく行われます。

MT4の開発者にこの件を見てもらうことはできますか?

MT4のクラッシュ(私のインジケータのEAバージョンがMT4をクラッシュさせる)についての詳しい情報はどこにあるのでしょうか?

Windowsのイベントビューアには何も表示されません。

 

私が関連するコードを投稿すると言ったとき、私はそのすべてを意味するのではなく、前回正常に動作したときから何を変更または追加したのかを意味しました。私は、あなたが途中で何のテストもせずに、72ページのストレートコードを書かなかったと仮定します....

 

何を変えたかというと、CreateHistory()をinit()からstart()に移動させました。

現在の状況は以下の通りです。

startでCreateHistory()を遅延なしで呼び出すと、問題なく動作する。

スタートでCreateHistory()を1秒以上遅延させて呼び出すと、MT4がハングアップする。MT4がハングアップする。

しかし、ハングするのはCreateHistory()ではなく、start()関数 である。

以下は、start()のコードです。

int start()
  {     
   int TFInd;
   int k;  
   
   if (CheckDebug(DebugStart, 2))
      {
         DebugStr = "DebugStart: " + "begin ---------------------------------------: ";
         PrintDebug(DebugFile, DebugStr);
      }

      
   for (IndexCount = 1; IndexCount <= MaxIndices; IndexCount++)
      {
         if (CheckDebug(DebugStart, 2))
            {
               DebugStr = "DebugStart: " + "in loop +++++++++++++: "+ "IndexCount: "+ IndexCount;
               PrintDebug(DebugFile, DebugStr);
            }              
      
         if (MyCurrencyIndices[IndexCount] == 0)
            break;

         CurrencyIndex = MyCurrencyIndices[IndexCount];             

         CurrencyIndexStr = Prefix + CurrencyNames[CurrencyIndex];
                 
         if (!HistoryCreated[CurrencyIndex] && (TimeLocal() >= IndiStartTime + 0))                                                  // yyy
            {                     
               FileSeek(FileHandle[CurrencyIndex, TimeFrameM15] , HeaderFilePointer[CurrencyIndex, TimeFrameM15] , SEEK_SET);
               FileSeek(FileHandle[CurrencyIndex, TimeFrameH1] , HeaderFilePointer[CurrencyIndex, TimeFrameH1] , SEEK_SET);
               FileSeek(FileHandle[CurrencyIndex, TimeFrameH4] , HeaderFilePointer[CurrencyIndex, TimeFrameH4] , SEEK_SET);
               FileSeek(FileHandle[CurrencyIndex, TimeFrameD1] , HeaderFilePointer[CurrencyIndex, TimeFrameD1] , SEEK_SET);

               CreateHistory();
               HistoryCreated[CurrencyIndex] = true;    
            }                           
      }  

   if (CheckDebug(DebugStart, 2))
      {
         DebugStr = "DebugStart: " + "returning ...";
         PrintDebug(DebugFile, DebugStr);
      }
                          
   return(0);
  }

以下は、2つのログファイルです。

1つは上記のコードでTimeLocal() >= IndiStartTime + 0(正常に動作)の場合、もう1つは上記のコードでTimeLocal() >= IndiStartTime + 1(ハングする)場合です。

最後のケースでは、CreateHistory()は正しく実行され、正しく返されます。

これは、start() 内で 1 回だけ呼び出されます。

start()では他に何も行われていませんが、start()がMT4によって再度呼び出されることはなく、MT4はCPUを消費してハングします。

CreateHistory()は、私のコードの80%をトリガーしている。

投稿できません。

0秒間の遅延のログファイル

2013.12.04 12:34:10 Test reduced:USDJPY M15 Debug Init() begin:
2013.12.04 12:34:10 Test reduced:USDJPY M15 Debug Init()戻り。
2013.12.04 12:34:10テストは、削減されました。USDJPY M15 DebugStart: begin -------------------------------------------------------:
2013.12.04 12:34:10 テストは減少した。USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1 <----------- CreateHistory()がすぐに呼び出される
2013.12.04 12:34:10 テストが減少しました。USDJPY M15 Debug CreateHistoryTimeFrame(), start: CurrencyIndex:1 TF: 1 ShiftsArray[1, TF]: 4996 TheShift: 0
2013.12.04 12:34:10テストは減少しました。USDJPY M15 Debug CreateHistoryTimeFrame(), final return: CurrencyIndex。1 TF: 1
2013.12.04 12:34:10 テストが減少しました。USDJPY M15 DebugStart: ループ内 +++++++++++: IndexCount:2
2013.12.04 12:34:10 テストは減少した。USDJPY M15 DebugStart: returning ...
2013.12.04 12:34:11 テストが減少しました。USDJPY M15 DebugStart: begin ---------------------------------------: <------------ start() は繰り返しトリガーされます。
2013.12.04 12:34:11 テストが減少しました。USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:34:11 テストが減少しました。USDJPY M15 DebugStart: in loop +++++++++: IndexCount:2
2013.12.04 12:34:11 テストは減少した。USDJPY M15 DebugStart: returning ...
2013.12.04 12:34:11 テストが減少しました。USDJPY M15 DebugStart: begin ---------------------------------------:
2013.12.04 12:34:11 テストは縮小されました。USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:34:11 テストは減少した。USDJPY M15 DebugStart: in loop +++++++++: IndexCount:2
2013.12.04 12:34:11 テストは減少した。USDJPY M15 DebugStart: returning ...

1秒間の遅延のログファイル

2013.12.04 12:32:17 Test reduced 0: USDJPY M15 Debug Init() begin:
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 Debug Init() return:
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:開始 -------------------------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:ループ内 +++++++++:IndexCount:2
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 DebugStart:返す...
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: begin -------------------------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:ループ内 +++++++++:IndexCount:2
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 DebugStart:返す...
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: begin -------------------------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:ループ内 +++++++++:IndexCount:2
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 DebugStart:返す...
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: begin -------------------------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:ループ内 +++++++++:IndexCount:2
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 DebugStart:返す...
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: begin -------------------------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:ループ内 +++++++++:IndexCount:2
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 DebugStart:返す...
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: begin -------------------------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:ループ内 +++++++++:IndexCount:2
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 DebugStart:返す...
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: begin -------------------------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:ループ内 +++++++++:IndexCount:2
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 DebugStart:返す...
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: begin -------------------------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:ループ内 +++++++++:IndexCount:2
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 DebugStart:返す...
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: begin -------------------------------------------------------:
2013.12.04 12:32:17 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:17 テストは0を削減:USDJPY M15 DebugStart:ループ内 +++++++++:IndexCount:2
2013.12.04 12:32:17 テストは0を削減しました:USDJPY M15 DebugStart:返す...
2013.12.04 12:32:18 テストは0を削減:USDJPY M15 DebugStart:開始 ---------------------------------------:
2013.12.04 12:32:18 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++: IndexCount:1
2013.12.04 12:32:18 テストは0を削減:USDJPY M15 Debug CreateHistoryTimeFrame(), start: CurrencyIndex:1 TF: 1 ShiftsArray[1, TF]: 4996 TheShift: 0 <----------- 1秒後 CreateHistory() が呼ばれる。
2013.12.04 12:32:18 Test reduced 0: USDJPY M15 Debug CreateHistoryTimeFrame(), final return.CreateHistoryTimeFrame()が呼ばれる。 CurrencyIndex:1 TF: 1
2013.12.04 12:32:18 Test reduced 0: USDJPY M15 DebugStart: in loop +++++++++++: IndexCount:2
2013.12.04 12:32:18 Test reduced 0: USDJPY M15 DebugStart: returning ... <---------- start() is never triggerd again.

 
かくれんぼをしたい気分です。 今、私はあなたの CreateHistory() 関数が ライブ.hstファイルに繰り返し 書き込んで いることを非常に疑って います。私は正しいですか?
 

CreateHistory() はオフラインのチャートを作成し、.hst ファイルに書き込みます。

ライブの .hst ファイルには書き込まれません。

 
mt4forum:

CreateHistory() はオフラインのチャートを作成し、.hst ファイルに書き込みます。

ライブの .hst ファイルには書き込まれません。

このことをどのように確認するのですか?
 
RaptorUK:
どのようにこれを確認しますか?

   CurrencyIndexStr = "CI_EUR";  

   FileName = CurrencyIndexStr + ThePeriod + ".hst";
   FileHandle = FileOpenHistory(FileName, FILE_BIN|FILE_WRITE);  

CI_EURという名前のMT4インストゥルメントがありません。

 
mt4forum:

CI_EURという名前のMT4インストゥルメントは存在しません。

OK