MT4 зависает, не вызывает start() снова - страница 3

 
mt4forum:

Нет, я не использую sleep() или messagebox(), но я делаю много работы в функции MyInit(), которая занимает около 5 секунд.

Вы можете увидеть это в лог-файле:

2013.11.15 14:35:32 Test reduced 1180990: USDJPY M15 DebugStart: InitialHistoryGapClosed
2013.11.15 14:35:32 Тест уменьшен 1180990: USDJPY M15 DebugMyInit begin: <---------- работа начинается
2013.11.15 14:35:32 Тест уменьшен 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 1 nach CreateHistory()
2013.11.15 14:35:33 Тест уменьшен 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 2 nach CreateHistory()
2013.11.15 14:35:34 Тест уменьшен 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 3 nach CreateHistory()
2013.11.15 14:35:35 Тест уменьшен 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 4 nach CreateHistory()
2013.11.15 14:35:35 Тест уменьшен 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 5 nach CreateHistory()
2013.11.15 14:35:36 Тест уменьшен 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 6 nach CreateHistory()
2013.11.15 14:35:37 Тест уменьшен 1180990: USDJPY M15 DebugMyInit InitialMyInitCalls: 0 IndexCount: 7 nach CreateHistory()
2013.11.15 14:35:37 Тест уменьшен 1180990: USDJPY M15 DebugMyInit return InitialMyInitCalls: 0 IndexCount: 8 <---------- работа завершена
2013.11.15 14:35:37 Тест уменьшен 1180990: USDJPY M15 DebugStart: последний возврат в InitialGapFound

Но почему после этого MT4 зацикливается?

Это не так, но вы испортите интерфейсный поток и MT4 заблокируется ... разве вы не можете сделать то, что вы делаете в советнике?
 
Вы все говорите о бесконечных циклах, но никто не интересуется, что делает CreateHistory(). Судя по журналу, она появляется только в последнем запуске start().
 
Ovo:
Вы все говорите о бесконечных циклах, но никто не интересуется, что делает CreateHistory(). Судя по логу, она появляется только в последнем запуске start().
Я предположил, что это какая-то функция сохранения истории... если ОП захочет показать ее, то покажет... Я предполагаю, что он этого не делает, и даже если он это сделает, это, вероятно, не поможет нам помочь ему. Самый быстрый способ - это опубликовать его код, чтобы кто-то мог посмотреть на него свежим взглядом. ... . .
 
RaptorUK:
Я предположил, что это какая-то функция сохранения истории... если ОП захочет показать ее, он покажет... Я предполагаю, что он этого не делает, и даже если он это сделает, это, вероятно, не поможет нам помочь ему. Самый быстрый способ - это опубликовать его код, чтобы кто-то мог посмотреть на него свежим взглядом. ... . .

Нет проблем, я хотел сказать, что бесконечный цикл может быть не единственной причиной зависания терминала. Особенно если скрипт изменяет некоторые файлы.
 

mt4forum 2013.11.16 11:14


Но почему после этого MT4 зацикливается?

Судя по вашему журналу, похоже, что он уже был в цикле. Что происходит после того, как он доходит до 8? Был ли он в цикле, если да, то как вы узнали, что он вышел из цикла? Вернулся ли он в init()?

Вы добавили Print("Start Started"); и это не появилось в лог-файле, значит, он так и не вошел в функцию start(). Это говорит о том, что он так и не вышел из функции init(). Добавьте больше утверждений Print() и сузьте круг поиска.

 

Прежде всего, спасибо за большой интерес и извините за поздний ответ.

Я отвечу на различные комментарии в следующих записях.

 
RaptorUK:
Это не так, но вы испортите интерфейсный поток и MT4 заблокируется ... разве вы не можете делать то, что вы делаете в советнике?

Я запустил программу как советник. Она либо зависает, либо аварийно завершает работу MT4.

 
mt4forum:

Я запустил программу как советник. Она либо зависает, либо аварийно завершает работу MT4.

Я думаю, вам нужно опубликовать свой код, чтобы у кого-нибудь был шанс помочь...
 
Ovo:
Вы все говорите о бесконечных циклах, но никто не интересуется, что делает CreateHistory(). Судя по логу, она появляется только в последнем запуске start().

CreateHistory() выполняет большой объем работы. Она перебирает валютные пары и таймфреймы и генерирует автономные графики.

Но лог-файл показывает, что она завершается правильно.

 
SDC:

Судя по вашему лог-файлу, похоже, что он уже был в цикле. Что происходит после того, как он достигает 8? Был ли он в цикле, если да, то как вы узнали, что он вышел из цикла? Вернулся ли он в init()?

Вы добавили Print("Start Started"); и это не появилось в лог-файле, значит, он так и не вошел в функцию start(). Это говорит о том, что он так и не вышел из функции init(). Добавьте больше операторов Print() и сузьте круг поиска.

После того как он дойдет до 8, он корректно возвращается в init().

Об этом свидетельствует следующая строка в журнале. "DebugMyInit return ..." - последняя отладочная строка в MyInit().

2013.11.15 12:33:22 Test reduced 395052: USDJPY M15 DebugMyInit return InitialMyInitCalls: 0 IndexCount: 8

Я использую свою собственную функцию print для создания лог-файла. Print("Start Started") не печатает в этот лог-файл.

Запись

2013.11.15 12:33:22 Test reduced 395052: USDJPY M15 DebugStart: last return in InitialGapFound

показывает, что он вышел из функции init().

Если я могу доверять, что моя отладочная функция правильно записывает всю информацию, то лог-файл говорит нам, что после последнего запуска start(),

start() завершается и больше не вызывается. В этом и заключается проблема.