Последовательность выполнение Init() и DeInit() - страница 3

 
Aleksei Radchenko:


Попробуйте обновить терминал до версии 1065. В предыдущих версиях была ошибка переинициализации как раз при смене таймфрема. Может поможет :)

https://www.mql5.com/ru/forum/187690


У меня стоит терминал 5.00  b1571 
 
можно сохранять значения переменных куда нибудь, в глобалы например. после перечативания прочитать и востановить переменные.
 
Andrey Dik:
можно сохранять значения переменных куда нибудь, в глобалы например. после перечативания прочитать и востановить переменные.


А потом завершит свою работу Deinit и всё испортит. Пропадает смысл в штатных Init и Deinit ели делать свои кастомные иниты и деиниты. 

Тоже сталкивался с этой проблемой. (

 
Sergey Chalyshev:


А потом завершит свою работу Deinit и всё испортит. Пропадает смысл в штатных Init и Deinit ели делать свои кастомные иниты и деиниты. 

Тоже сталкивался с этой проблемой. (


Согласен полностью (Пропадает смысл в штатных Init и Deinit)
 
Vasiliy Pushkaryov:


Может быть попробовать графическим объектам присваивать в качестве составляющей префикса их имени период ТФ,

а потом что-то вроде такого применить:


Спасибо за ответ

Да пришлось примерно так и делать, но это частичное решение. 

С переменными так же можно через ресурс или файлы, но это отдельные дополнительные ресурсы, которых можно было избежать исправив МТ5 

Захламление кода лишними побочными функциями проверками и т.п. (ЧЕРЕЗ Ж....)

 

Всегда думал (оказывается напрасно), что при смене ТФ сначала deinit на старом ТФ, а потом Init на новом. Это же логичный ход событий, на эту логику и полагался делая советники и индикаторы. А тут оказывается такая ерунда с нарушением последовательности событий...
При работе иногда замечал, что что-то не то с графиками и граф. объектами и приходилось несколько раз переключать ТФ, чтобы все нормально отображалось.


Это теперь придется в кодах разбираться, где в деинитах что-то меняется, а потом в инитах тоже меняется обратно... а оказывается последовательность - наоборот!!! Жесть а не логика. Кто такое придумал?

Первое что вспоминается - у меня в деинит происходит запоминание в глоб. переменные предыдущего состояния (нажатых/отжатых кнопкок) а потом в инитах происходит установка кнопок по сохраненным значениям. И вот именно кнопки у меня не всегда правильно переустанавливаются. Это первое, что вспомнил, может что-то еще найду... завтра буду копаться.


Спасибо разработчикам, подкинули работы...

 

В Deinit прописать запись всех данных в глобалки. При этом выставить одну глобалку, как семафор - через GlobalVariableSetOnCondition.

В Init прописать, что если семафор в состоянии "данные сброшены" - считываем и работаем, поставив семафор в состояние "все прочли".

Если же семафор в состоянии "нихрена не понятно", то просто ожидаем семафора (либо через зацикленный Sleep, либо через OnTimer).


Ну и, конечно, если семафор отсутствует напрочь, то это значит, что мы первый раз запустились и все считаем, попутно создав семафор не будущие смены ТФ.


Что сложного в такой реализации? Один раз библиотечкой прописать и все.

 
fxsaber:

В Deinit прописать запись всех данных в глобалки. При этом выставить одну глобалку, как семафор - через GlobalVariableSetOnCondition.

В Init прописать, что если семафор в состоянии "данные сброшены" - считываем и работаем, поставив семафор в состояние "все прочли".

Если же семафор в состоянии "нихрена не понятно", то просто ожидаем семафора (либо через зацикленный Sleep, либо через OnTimer).


Что сложного в такой реализации? Один раз библиотечкой прописать и все.

Я вообще не знал, что такая проблема  есть. Надеялся на последовательность деинит-инит И никак не наоборот. Когда знаешь проблемы - можно их решать. Но мне кажется это должно быть решено на уровне терминальной логики, а не костылей которые нужно в каждую программу теперь подставлять...
 
elibrarius:
Я вообще не знал, что такая проблема  есть. Надеялся на последовательность деинит-инит И никак не наоборот. Когда знаешь проблемы - можно их решать. Но мне кажется это должно быть решено на уровне терминальной логики, а не костылей которые нужно в каждую программу теперь подставлять...
Это не костыль, а простое решение. Вопрос лишь в том, кто его реализует - разработчики или пользователи. И там и там надо один раз потратить время и написать. Если пользователям под силу - написали и не паримся над вопросом больше. Сам только прочел ветку и тут же в голову пришло решение. Что мусолить то? Можно долго что-то требовать, а можно самому быстро написать.
 
fxsaber:
Это не костыль, а простое решение. Вопрос лишь в том, кто его реализует - разработчики или пользователи. И там и там надо один раз потратить время и написать. Если пользователям под силу - написали и не паримся над вопросом больше. Сам только прочел ветку и тут же в голову пришло решение. Что мусолить то? Можно долго что-то требовать, а можно самому быстро написать.
Если умножить количество мелких людишек, которые - каждый сам по себе, снова и снова - будут решать общую проблему, то потраченные человеко-часы во много раз (в пределе в бесконечное число раз ;-)) превысят время, которое нужно для любого варианта правки в самом терминале. Даже наличие гипотетической библиотеки не гарантирует, что все будут в курсе о её наличии и необходимости использовать. Вообще не понятно, зачем делать и оставлять такие "грабли"?
Причина обращения: