Причина деинициализации.

 

int UninitializeReason( ) 
// Возвращает код причины завершения экспертов, пользовательских индикаторов и скриптов.
// Возвращаемые значения могут быть одним из кодов деинициализации.
// Эту функцию можно также вызывать в функции init() для анализа причин деинициализации предыдущего запуска.

                                 0 Скрипт самостоятельно завершил свою работу 

REASON_REMOVE           1 Программа удалена с графика 
REASON_RECOMPILE       2 Программа перекомпилирована 
REASON_CHARTCHANGE  3 Символ или период графика был изменен 
REASON_CHARTCLOSE    4 График закрыт 
REASON_PARAMETERS    5 Входные параметры были изменены пользователем 
REASON_ACCOUNT        6 Активирован другой счет

Обнаружил, что смена шаблона происходит с "REASON_REMOVE".

Однако простое удаление и смена шаблона производят разные действия.

Удаление программы не приводит к удалению графических объектов, если, конечно это не предусмотрено самой программой.

Смена шаблона приводит к полному удалению всех графических объектов окна.

==================

Есть предложение добавить ещё одну причину деинициализации. Смена шаблона - "REASON_NEW_PATTERN" или "REASON_PATTERN".

 

Есть ещё одна догадка. 

При загрузке шаблона сначала принудительно удаляются все графические объекты прежнего графика и только потом запускается функция "deinit()" выгружаемых программ.

Чудно!

 
Метаквоты, обнародуйте своё отрицательное мнение! :-)
 
Zhunko >>:
Метаквоты, обнародуйте своё отрицательное мнение! :-)

Проверяйте наличие графических объектов в функции deinit() и на основании полученной информации стройте логику программы.

 
Rosh >>:

Проверяйте наличие графических объектов в функции deinit() и на основании полученной информации стройте логику программы.

Разумеется, так и сделал!

Но всё таки, что ответите по первому посту?

 

Оказывается, что смена профиля тоже происходит по первой причине (REASON_REMOVE).

Это совсем странно...

Смена профиля, это же закрытие графика!!!

Всё чуднее и чуднее...

 

Кто-нибудь в курсе, что эта функция:

int UninitializeReason() 
// Возвращает код причины завершения экспертов, пользовательских индикаторов и скриптов. Возвращаемые значения могут быть одним из кодов деинициализации.
// Эту функцию можно также вызывать в функции init() для анализа причин деинициализации предыдущего запуска.

возвращает причину деинициализации последней деинициализируемой программы графика, а не причину деинициализации программы, из которой она вызвана?

Может, что не так понял?

 
Zhunko >>:

                                 0 Скрипт самостоятельно завершил свою работу 

REASON_REMOVE           1 Программа удалена с графика 
REASON_RECOMPILE       2 Программа перекомпилирована 
REASON_CHARTCHANGE  3 Символ или период графика был изменен 
REASON_CHARTCLOSE    4 График закрыт 
REASON_PARAMETERS    5 Входные параметры были изменены пользователем 
REASON_ACCOUNT        6 Активирован другой счет

Обнаружил, что смена шаблона происходит с "REASON_REMOVE".

Однако простое удаление и смена шаблона производят разные действия.

Удаление программы не приводит к удалению графических объектов, если, конечно это не предусмотрено самой программой.

Смена шаблона приводит к полному удалению всех графических объектов окна.

==================

Есть предложение добавить ещё одну причину деинициализации. Смена шаблона - "REASON_NEW_PATTERN" или "REASON_PATTERN".

Сегодня обнаружил, что при смене шаблона UninitializeReason() теперь возвращает REASON_CHARTCLOSE!!!

Метаквоты изменили и не сообщили. У меня программа перестала работать правильно. Замучился искать причину...

 
Zhunko писал(а) >>

Сегодня обнаружил, что при смене шаблона UninitializeReason() теперь возвращает REASON_CHARTCLOSE!!!

Метаквоты изменили и не сообщили. У меня программа перестала работать правильно. Замучился искать причину...

Мы в этом месте ничего не трогали. А если бы изменили, то сообщили бы (лишняя строчка в "что нового" была бы).

 
stringo >>:

Мы в этом месте ничего не трогали. А если бы изменили, то сообщили бы (лишняя строчка в "что нового" была бы).

Может изменили так, что не заметили этого. Меняли одно - другое изменилось.

Первый пост темы. Проверял же! Можно попробывать старый билд найти. Соответствующий дате поста.

Хотя, возможно словил причину деинициализации не той программы. Писал об этом выше. Очень всё запутано...