Сброс GV-переменных

 
Здравствуйте. Вот если произошёл критическое закрытие терминала, то значения GV переменных сбрасываются к предыдущему открытию терминала (вроде так). А можно этого избежать?
 
Murat Ishakov:
Здравствуйте. Вот если произошёл критическое закрытие терминала, то значения GV переменных сбрасываются к предыдущему открытию терминала (вроде так). А можно этого избежать?

принудительный сброс GV : https://www.mql5.com/ru/docs/globals/globalvariablesflush

но в первую очередь надо лечить "критическое закрытие терминала". Это из рук вон плохо когда попадается - потом могут случаться любые чудеса..На практике видел только при отладке DLL.

В теории ещё может случаться когда питание во время активной большой торговле резко обрубается. Но не встречал :-) MT в этом плане весьма надёжен - часто сбрасывает GV и с ними обычно всё в порядке

Документация по MQL5: Глобальные переменные терминала / GlobalVariablesFlush
Документация по MQL5: Глобальные переменные терминала / GlobalVariablesFlush
  • www.mql5.com
Принудительная запись содержимого всех глобальных переменных на диск. Возвращаемое значение Нет возвращаемого значения. Примечание Терминал сам...
 
Maxim Kuznetsov #:

принудительный сброс GV : https://www.mql5.com/ru/docs/globals/globalvariablesflush

но в первую очередь надо лечить "критическое закрытие терминала". Это из рук вон плохо когда попадается - потом могут случаться любые чудеса..На практике видел только при отладке DLL.

В теории ещё может случаться когда питание во время активной большой торговле резко обрубается. Но не встречал :-) MT в этом плане весьма надёжен - часто сбрасывает GV и с ними обычно всё в порядке

Спасибо огромное за GlobalVariablesFlush, как то не сообразил насчёт этого. А если я её буду вызывать после обновления значения каждой GV переменной (а их у меня много) нормально будет? А вчера у меня после сбоя программы весь Windows VPS намертво завис, ничего не получалось сделать, он вообще не реагировал. Помогла только принудительная перезагрузка, но в результате произошло неправильное закрытие терминала
 
Murat Ishakov #:
Спасибо огромное за GlobalVariablesFlush, как то не сообразил насчёт этого. А если я её буду вызывать после обновления значения каждой GV переменной (а их у меня много) нормально будет? А вчера у меня после сбоя программы весь Windows VPS намертво завис, ничего не получалось сделать, он вообще не реагировал. Помогла только принудительная перезагрузка, но в результате произошло неправильное закрытие терминала

в первую очередь выясняйте причины "сбоя программы". У вас что-то со сторонним софтом (советники/индюки/панели с кривыми DLL) или Windows неполноценен (убедитесь что все обновы присутствуют и IE/Edge там последней версии)
MT сам по себе очень стабильный софт.

при частых изменениях GlobalVar и так потенциально способен "провертеть дырку на диске", а с принудительным Flush так тем более ;-)

 
Maxim Kuznetsov #:

в первую очередь выясняйте причины "сбоя программы". У вас что-то со сторонним софтом (советники/индюки/панели с кривыми DLL) или Windows неполноценен (убедитесь что все обновы присутствуют и IE/Edge там последней версии)
MT сам по себе очень стабильный софт.

при частых изменениях GlobalVar и так потенциально способен "провертеть дырку на диске", а с принудительным Flush так тем более ;-)

В смысле "провертеть дырку"?
 
Murat Ishakov #:
В смысле "провертеть дырку"?

в прямом..они-же сохраняются на диск после изменений (кроме случая когда задал GlobalVariableTemp)

частая перезапись файла или его фрагмента ведёт к "дырке". Разделяйте, "эти переменные меняются часто-часто пусть будут Temp, а эти держат стейт их писать аккуратно". Старт программ должен подразумевать что GV отсутствуют и способ проверки их корректности, гонки образуются

и кстати они (GV) не то чтобы очень быстрые. Если пишете на C/C++ есть смысл их менять в своих проектах на atomic, tsv или key-value базы