Б188 деинициализация

 
После срабатывания deinit()
срабатывает start() ???
 
Проверил - start после deinit не вызывается. Можете кусок кода привести?
 
Извиняюсь за поспешный, не обдуманный вопрос,
конечно start после deinit не вызывается - это понятно.

Для полного прояснения, хотелось-бы знать
почему в логах экспертов строка "deinitialized" принтуется дважды?
Пример лога прилагаю.
Спасибо.
 
По логу видно, что эксперт не желает самостоятельно закрываться и терминал его принудительно и аварийно(именно аварийно, возможны утечки памяти и прочие неприятности) глушит.

Строки shutdown by timeout, terminated by timeout не зря выдаются.
Видимо эксперт излишне эгоистичен, зациклен и не проверяет через IsStopped() флаг закрытия советника. Это очень плохой случай, от таких экспертов можно получить только неприятности.

Еще важно: эксперт использует DLL?
 
Еще важно: эксперт использует DLL?

Да, DLL используется.
 
Еще важно: эксперт использует DLL?

Да, DLL используется.

Именно DLL (он не управляется виртуальной машиной MQL4) отъедает все время , в результате терминал не может остановить эксперта. Обычный MQL4 код автоматически содержит проверяющий код статуса состояния и может корректно завершаться, когда родитель просит его остановиться.

Рекомендую хотя бы раз в секунду вылезать из DLL и самостоятельно проверять флаг IsStopped(), чтобы корректно завершать свою работу.
 
Извиняюсь за назойливость, все же до конца не все ясно.
А именно: Почему-то именно при деинициализации начинают срабатывать функции из start(),
которые должны срабатывать только один раз при первом start.
 
Извиняюсь за назойливость, все же до конца не все ясно.


А это:

По логу видно, что эксперт не желает самостоятельно закрываться и терминал его принудительно и аварийно(именно аварийно, возможны утечки памяти и прочие неприятности) глушит.

Строки shutdown by timeout, terminated by timeout не зря выдаются.
Видимо эксперт излишне эгоистичен, зациклен и не проверяет через IsStopped() флаг закрытия советника. Это очень плохой случай, от таких экспертов можно получить только неприятности.


Терминал жестоко прерывает(не останавливает, а терминирует) рабочий поток эксперта.
Напишите корректного эксперта и проверьте снова. Если у своего эксперта видите строки "shutdown by timeout, terminated by timeout ", то будьте уверены, что процесс эксперта снимают "по-грязному", как зависший процесс со всеми вытекающими (печальными) последствиями.
 
Понимаю, что уже порядком надоел...
но всеже рискну утверждать:
Закрытие графика вызывает start{}, при условии, что с момента пуска на график не приходило тиков.
Прошу еще раз проверить.
 
Какие именно события к чему приводят утверждать не берусь.
Однако есть некоторые события, приводящие (видимо) к запуску start() индикатора. По моим наблюдениям, это - переход мышкой между любыми (!) окнами валют и при изменении размеров окна.

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

Получается, что на этих событиях индикатор воспроизводит несанкционированный тик, т.е ведёт себя так, как будто тик пришёл, хотя на самом деле его нет.
 
Кстати, эффект наблюдается и при компиляции в ME "больших" файлов, более 300 строк.
Причина обращения: