Столкнулся с такой проблемой буквально на последних паре версий 8.8.1 и 8.8.4
В чем проблема: при остановке скрипта квик стал «уходить в себя» (зависать).
Останавливается скрипт банально через OnStop()
Логика там проще некуда:
IsRun = true
OnInit()
CreateDataSource()
end
main()
while IsRun do
getCandlesByIndex()
--доп. запрос данных с индикатора
--и после вычисления
end
end
OnStop()
IsRun = false
end
Все. Структура как по учебнику. Все расчеты внутри main. Никаких допов не подключается, все расчеты сугубо арифметические.
Считают каждую минуту при появлении новых данных по свечам.
После остановки скрипта считать нечего. С рояли он зависает?
Причем весь парадокс в том, что подобное происходит только после продолжительной работы скрипты (где-то от часа и более).
Запущенный и выключенный через 10-15 минут не зависает.
Впечатление будто скрипт в момент остановки не понимает куда сбросить накопившиеся за время работы данные, хотя:
Lua uses automatic memory management that uses garbage collection based on certain algorithms that is in-built in Lua. As a result of automatic memory management, as a developer −
- No need to worry about allocating memory for objects.
- No need to free them when no longer needed except for setting it to nil.
Вопрос не в силе железа или объеме памяти.
Подскажите, кто с таким сталкивался?
UPD:
Переписал OnStop() добавив
return:
function OnStop()
IsRun = false
return 5000
end
Тесты в интервале до 127 минут с прерыванием в разное время проблем не выявило.
Вся структура кода не менялась.
С таким бредом я еще не сталкивался.
Большое спасибо всем неравнодушным.
В ОнСтоп после Фалсе ещё Слип делаю на пару секунд.
А вообще, по хорошему перед Фалсе надо отписаться от данных.
А если зависает, то намертво? Или через 5-10 секунд останавливается?
Принципы экстремального программирования.
Разработка с нуля по этапам с отладкой каждого этапа.
Нулевой этап: только OnStop() и main() с минимальным кодом.
Если на этапе 0 сбоя нет, можно наращивать код на следующих этапах.
Не зависает.
Потому что торговые приказы и их коллбэки обрабатываются через trans2quik.dll