При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)

Страницы: 1
RSS
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
В версии QUIK 12.2.1.2 (а, похоже, и в более ранних) при запуске любого коллбека отключается сборка мусора (collectgarbage('stop')), а после его отработки включается (collectgarbage('restart')).  В общем, решение разумное, повышающее надежность, но не сохраняющее состояние сборки мусора скрипта. Это неправильно.
    Надо:
1) сохранять состояние сборки мусора скрипта перед выполнением коллбека;
2) отключать сборку сборку мусора;
3) выполнять коллбек;
4) восстанавливать состояние сборки мусора.
 
В версии QUIK 12.2.2.8 (а, похоже, и в более ранних) при запуске любого коллбека отключается сборка мусора (collectgarbage('stop')), а после его отработки включается (collectgarbage('restart')).  Это ошибка.
   Коллбеки не должны менять состояние уборки мусора после своего выполнения, а должны восстанавливать то, которое было перед их выполнением.
-----
   Разработчик скрипта может в какой-то момент отключить на какое то время уборку мусора (имеет право), а тут прилетает  :smile:  любой коллбек  и все портит.
 
Цитата
TGB написал:
Коллбеки не должны менять состояние уборки мусора после своего выполнения, а должны восстанавливать то, которое было перед их выполнением.
  Поддержка: что не так? Ответьте, пожалуйста.
 
Цитата
TGB написал:
В версии QUIK 12.2.2.8 (а, похоже, и в более ранних) при запуске любого коллбека отключается сборка мусора (collectgarbage('stop')), а после его отработки включается (collectgarbage('restart')).  Это ошибка.    Коллбеки не должны менять состояние уборки мусора после своего выполнения, а должны восстанавливать то, которое было перед их выполнением.
   Вроде, написано понятно, но если непонятно, то демонстрирую кодом:
Код
local OK = false
function OnParam()
   OK = true
end

function main()
   _RUN_ = true
   collectgarbage('stop')     --   Сборка мусора отключена --
   while _RUN_ do
      if not collectgarbage('isrunning') then
         if OnParam and OK then
            message(' Ошибка обработки коллбеков устранена. '
               .. 'В скрипте где то был остановлен сбор мусора. '
               .. 'Вызов коллбека OnParam не меняет состояние сборки мусора', 3)
         end
      end

      sleep(3000)
   end

end

function OnStop()
   _RUN_ = false
   return 10000  
end


   Если код выполняется при подключенном к серверу QUIKе  и при этом нет сообщения:
"Ошибка обработки коллбеков устранена. ............" , то понятно, что коллбек  OnParam включил сборку сборки мусора, отключенную разработчиком в скрипте.
Страницы: 1
Читают тему
Наверх