O MT4 fica pendurado, não chama o início() novamente - página 4

 

Concordo com o Raptor, a única maneira de alguém realmente poder ajudar é se você afixar o código relevante, caso contrário é como tirar fotos no escuro.

 

Desculpe, não posso afixar o código. São 72 páginas e é o código de um produto, que eu divulgarei.

Enquanto isso, implementei as chamadas de registro, que WHRoeder sugeriu em sua primeira resposta,

informações de depuração, que podem ser visualizadas pelo dbgView da Microsoft.

Esta informação de depuração é exatamente a mesma que minha própria informação de depuração, que mostra,

que podemos confiar no que vemos nos arquivos de registro.

Agora, o arquivo de registro nos diz, que o start() está encerrado, mas não é mais acionado.

Parece que isto tem a ver com a quantidade de trabalho sendo feito no CreateHistory(), que é chamado dentro de start().

Quando eu chamo a mesma CreateHistory() no init(), exatamente a mesma quantidade de trabalho é feita sem nenhum problema.

Podemos envolver um desenvolvedor do MT4, para ver isto?

Onde posso encontrar mais informações sobre uma falha do MT4 (a versão EA do meu indicador falha o MT4)?

Eu não consegui ver nada no visualizador de eventos do Windows.

 

Quando eu disse postar o código pertinente, não quis dizer tudo, quis dizer o que você mudou ou acrescentou a ele desde a última vez que correu com sucesso ? Presumo que você não escreveu 72 páginas de código reto sem nenhum teste ao longo do caminho ...

 

O que eu mudei foi: mudei CreateHistory() do init() para start().

A situação atual é a seguinte:

Quando eu chamo CreateHistory() de init() sem qualquer atraso: funciona bem.

Quando eu chamo CreateHistory() em início com um atraso >= 1 seg: o MT4 fica pendurado.

Entretanto, não é CreateHistory(), que pende, é a função start().

Aqui está o código para 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);
  }

Abaixo estão 2 arquivos de log:

um para o código acima com TimeLocal() >= IndiStartTime + 0 (funciona ok), um para o código acima com TimeLocal() >= IndiStartTime + 1 (pendura).

No último caso, CreateHistory() executa e retorna corretamente.

Ele é chamado apenas uma vez dentro do start().

Nada mais está sendo feito em start(), no entanto start() nunca mais é chamado pelo MT4 e MT4 pendura, consumindo a CPU.

CreateHistory() aciona 80% do meu código.

Eu não posso postar.

arquivo de log por 0 seg. de atraso:

2013.12.04 12:34:10 Teste reduzido: USDJPY M15 Debug Init() começa:
2013.12.04 12:34:10 Teste reduzido: USDJPY M15 Debug Init() retorno:
2013.12.04 12:34:10 Teste reduzido: USDJPY M15 DebugStart: início: ---------------------------------------:
2013.12.04 12:34:10 Teste reduzido: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1 <----------- CreateHistory() é chamado imediatamente
2013.12.04 12:34:10 Teste reduzido: USDJPY M15 Debug CreateHistoryTimeFrame(), start: CurrencyIndex: 1 TF: 1 ShiftsArray[1, TF]: 4996 TheShift: 0
2013.12.04 12:34:10 Teste reduzido: USDJPY M15 Debug CreateHistoryTimeTimeFrame(), retorno final: CurrencyIndex: 1 TF: 1
2013.12.04 12:34:10 Teste reduzido: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 2
2013.12.04 12:34:10 Teste reduzido: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:34:11 Teste reduzido: USDJPY M15 DebugStart: iniciar ---------------------------------------: <------------ start() é acionado repetidamente
2013.12.04 12:34:11 Teste reduzido: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:34:11 Teste reduzido: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 2
2013.12.04 12:34:11 Teste reduzido: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:34:11 Teste reduzido: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:34:11 Teste reduzido: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:34:11 Teste reduzido: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 2
2013.12.04 12:34:11 Teste reduzido: USDJPY M15 DebugStart: retornando ...

arquivo de log por 1 seg. de atraso:

2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 Debug Init() começa:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 Debug Init() retorno:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: início ---------------------------------------:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:17 Teste reduzido 0: USDJPY M15 DebugStart: retornando ...
2013.12.04 12:32:18 Teste reduzido 0: USDJPY M15 DebugStart: iniciar ---------------------------------------:
2013.12.04 12:32:18 Teste reduzido 0: USDJPY M15 DebugStart: em loop +++++++++++++: IndexCount: 1
2013.12.04 12:32:18 Teste reduzido 0: USDJPY M15 Debug CreateHistoryTimeFrame(), start: CurrencyIndex: 1 TF: 1 ShiftsArray[1, TF]: 4996 TheShift: 0 <----------- após 1 seg CreateHistory() é chamado
2013.12.04 12:32:18 Teste reduzido 0: USDJPY M15 Debug CreateHistoryTimeFrame(), retorno final: CurrencyIndex: 1 TF: 1
2013.12.04 12:32:18 Teste reduzido 0: USDJPY M15 DebugStart: in loop +++++++++++++: IndexCount: 2
2013.12.04 12:32:18 Teste reduzido 0: USDJPY M15 DebugStart: retornar ... <---------- start() nunca mais é acionado

 
Tenho vontade de brincar de esconde-esconde. Neste momento, estou muito desconfiado de que sua função CreateHistory() escreverepetidamente para os arquivos .hst ao vivo. Eu estou certo?
 

CreateHistory() cria gráficos off-line, escrevendo para arquivos .hst.

Ele NÃO escreve para os arquivos .hst ao vivo.

 
mt4forum:

CreateHistory() cria gráficos off-line, escrevendo para arquivos .hst.

Ele NÃO escreve para os arquivos .hst ao vivo.

Como você garante que este é o caso ?
 
RaptorUK:
Como você garante que este é o caso ?

   CurrencyIndexStr = "CI_EUR";  

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

Não existe um instrumento MT4 chamado CI_EUR.

 
mt4forum:

Não existe um instrumento MT4 chamado CI_EUR.

OK