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

 
mt4forum:

Não, eu não uso sono() ou messagebox(), mas faço muito trabalho na função MyInit(), que leva cerca de 5 segundos.

Você pode ver isso no arquivo de log:

2013.11.15 14:35:32 Teste reduzido 1180990: USDJPY M15 DebugStart: InitialHistoryGapCapClosed
2013.11.15 14:35:32 Teste reduzido 1180990: USDJPY M15 DebugMyInit começa: <---------- começa o trabalho
2013.11.15 14:35:32 Teste reduzido 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 1 nach CreateHistory()
2013.11.15 14:35:33 Teste reduzido 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 2 nach CreateHistory()
2013.11.15 14:35:34 Teste reduzido 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 3 nach CreateHistory()
2013.11.15 14:35:35 Teste reduzido 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 4 nach CreateHistory()
2013.11.15 14:35:35 Teste reduzido 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 5 nach CreateHistory()
2013.11.15 14:35:36 Teste reduzido 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 6 nach CreateHistory()
2013.11.15 14:35:37 Teste reduzido 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 7 nach CreateHistory()
2013.11.15 14:35:37 Teste reduzido 1180990: USDJPY M15 DebugMyInit Retornar InicialMyInitCalls: 0 IndexCount: 8 <---------- termina o trabalho
2013.11.15 14:35:37 Teste reduzido 1180990: USDJPY M15 DebugStart: último retorno em InitialGapFound

Mas por que isso faria com que o MT4 entrasse em loop depois disso?

Não, mas você estraga a rosca de interface e o MT4 trava... você não pode fazer o que está fazendo em um EA?
 
Todos vocês falam de loops infinitos, mas ninguém está curioso sobre o que a CreateHistory() faz. De acordo com a saída do log, ele aparece apenas na última execução().
 
Ovo:
Todos vocês falam de loops infinitos, mas ninguém está curioso sobre o que a CreateHistory() faz. De acordo com a saída do log, ele aparece apenas na última execução().
Presumi que fosse algum tipo de função de salvar a história . . . se o OP quiser mostrá-la, ele o fará . . . Presumo que ele não o faça e mesmo que o faça, provavelmente não vai nos ajudar a ajudá-lo. A maneira mais rápida é ele postar seu código para que alguém possa olhar para ele com um novo par de olhos... . .
 
RaptorUK:
Presumi que fosse algum tipo de função de salvar a história . . . se o OP quiser mostrá-la, ele o fará . . . Presumo que ele não o faça e mesmo que o faça, provavelmente não vai nos ajudar a ajudá-lo. A maneira mais rápida é ele postar seu código para que alguém possa olhar para ele com um novo par de olhos... . .

Não há problema, eu queria apontar que o loop infinito pode não ser a única razão para o terminal ser pendurado. Especialmente se o script modifica alguns arquivos.
 

mt4forum 2013.11.16 11:14


Mas por que isso faria com que o MT4 entrasse em loop depois disso?

A julgar pelo seu arquivo de registro, parece que já estava em loop. O que acontece depois que ele chega a 8 ? ele estava em loop, se ele estava em loop, como você sabe que ele saiu desse loop ? Ele retornou ao init() ?

Você adicionou Print("Start Started"); e ele nunca apareceu no arquivo de log, então ele nunca entrou na função start(). Isso sugere que ele nunca saiu da função init(). Coloque mais declarações Print() e reduza-a.

 

Antes de mais nada, obrigado pelo grande interesse, e desculpem pela minha resposta tardia.

Abordarei os diferentes comentários nas seguintes entradas.

 
RaptorUK:
Não, mas você estraga a rosca de interface e o MT4 trava... você não pode fazer o que está fazendo em um EA?

Eu executei o programa como EA. Ou ele também pendura ou trava o MT4.

 
mt4forum:

Eu executei o programa como EA. Ou ele também pendura ou trava o MT4.

Acho que você precisa postar seu código para que qualquer um possa ter muitas chances de ajudar ...
 
Ovo:
Todos vocês falam de loops infinitos, mas ninguém está curioso sobre o que o CreateHistory() faz. De acordo com a saída do log, ele aparece apenas na última inicialização() executada.

CreateHistory() faz muito trabalho. Ele percorre os pares de moedas e prazos e gera gráficos off-line.

Mas o arquivo de registro mostra que ele termina corretamente.

 
SDC:

A julgar pelo seu arquivo de registro, parece que já estava em um loop. O que acontece depois de chegar a 8 ? estava em loop, se fosse como você sabe que saiu desse loop ? Ele voltou ao init() ?

Você adicionou Print("Start Started"); e ele nunca apareceu no arquivo de log, então ele nunca entrou na função start(). Isso sugere que ele nunca saiu da função init(). Coloque mais declarações Print() e reduza-a.

Após chegar a 8, ele retorna corretamente à função init().

A seguinte linha no arquivo de log mostra que "DebugMyInit return ..." é a última linha de debug em MyInit().

2013.11.15 12:33:22 Teste reduzido 395052: USDJPY M15 DebugMyInit return InitialMyInitCalls: 0 IndexCount: 8

Eu uso minha própria função de impressão para gerar o arquivo de log. A impressão ("Start Started") não imprime para esse arquivo de log.

A entrada

2013.11.15 12:33:22 Teste reduzido 395052: USDJPY M15 DebugStart: último retorno em InitialGapFound

mostra, que ele saiu da função init().

Se eu posso confiar, que minha função de depuração registra todas as informações corretamente, então o arquivo de registro nos diz, que após a última execução do init(),

start() é abandonado e não é chamado novamente. Esse é o problema.