1 (2015-01-26 16:05:16 отредактировано slkumax)

Тема: QUik вылетает после остановки скрипта

Скрипт отрабатывает отлично. Когда выключаю его, квик вылетает и выдаёт сообщение "Обратитесь в поддержку Quik"


if SN == "Exit"
        or SN == "myForm"             then myForm:Release() vcl=nil   end


А в main вот что

function main()
  repeat sleep(50)
  until not vcl
 
    sleep(300)
end



Decoda выдаёт следующую ошибку :
Warning 1003: Not all virtual machines were destroyed



Вот полный лог Decoda

Debugging session started
Debugger attached to process
0x10ff1a08: VM created
0x07ee6cd8: VM created
0x10ff1a08: VM destroyed
Warning 1003: Not all virtual machines were destroyed
Debugging session ended

2 (2015-01-26 21:46:42 отредактировано swerg)

Re: QUik вылетает после остановки скрипта

Вы используете VCLua, я угадал?

Вот этот фрагмент кода -зачем написан? если его убрать - проблема остается?

vcl=nil  

А выход из скрипта обеспечить обычным флажком, как это написано в примерах на этом сайте для VCLua

3

Re: QUik вылетает после остановки скрипта

Спасибо всем, с данной проблемой разобрался и main функция со всеми её дополнениями работает отлично. (1- заменил библиотеку VCLUa 2- изменил завершение main)

Но вот беда .... теперь следующая ошибка.
Добавил я функцию
function OnAllTrade(trade)

       if (trade.seccode == "RIH5") then
       if (CheckBox.Checked==true) then
       zz=trade.price
       EditPrice.Text=tostring(zz)
       EditSlku5.Text=tostring(zz)
      
       end
       end
       end

Если её убрать, то всё работает отлично. Но если её вернуть, то после единственного запуска программы квик выдаёт следующее сообщение:
"Unknown error. Possible unhandled exception."

И далее без перезагрузки квика уже ни один скрипт на LUA не запускается.

4

Re: QUik вылетает после остановки скрипта

slkumax,
есть такое предложение.

Вы подробно пишете что и как вы поменяли. Во-первых, чтобы другие пользователи могли воспользоваться вашими полезными советами, во-вторых для того, чтобы можно было что-то предметно отвечать. Потому как я запросто сейчас скажу, что ровно вот такой как у вас фрагмент кода и меня работает отлично, и что?

Пока предположение такое: вы закрываете форму (или останавливаете скрипт - как вы его останавливаете, кстати? опять секреты?), элементы EditPrice и EditSlku5 фактически уже уничтожены, но вызовы OnAllTrade() продолжают еще случаться, происходит обращение к несуществующим элементам EditPrice и EditSlku5 - и проблема.

5

Re: QUik вылетает после остановки скрипта

Я думаю я скоро без проблем весь код сюда выложу. Я делаю пока простенький привод для торговли удобной. Сейчас постараюсь отладить бОльшую часть ошибок и выложу.

6

Re: QUik вылетает после остановки скрипта

Буду очень признателен.
Есть просьба: выложить отдельной веткой в разделе "[url=https://quik2dde.ru/viewforum.php?id=13]Lua: визуальные библиотеки[/url]" или "[url=https://quik2dde.ru/viewforum.php?id=12]Готовые роботы[/url]".
Там совместными усилиями и допилим за одно )
Чтобы эта ветка зазря не разрасталась, потому что она как бы не совсем "по теме" готового чего-то.

7

Re: QUik вылетает после остановки скрипта

swerg пишет:

Буду очень признателен.
Есть просьба: выложить отдельной веткой в разделе "[url=https://quik2dde.ru/viewforum.php?id=13]Lua: визуальные библиотеки[/url]" или "[url=https://quik2dde.ru/viewforum.php?id=12]Готовые роботы[/url]".
Там совместными усилиями и допилим за одно )
Чтобы эта ветка зазря не разрасталась, потому что она как бы не совсем "по теме" готового чего-то.


[url]http://quik2dde.ru/viewtopic.php?pid=807#p807[/url] пока что это только начало, но ошибка уже одна есть.

8

Re: QUik вылетает после остановки скрипта

По ссылке выше лежит версия новая программы. Удалось установить что если скрипт останавливать через QUik ("остановить" в разделе "доступные скрипты"), то всё отлично, а если закрывать "крестиком" или через кнопку "EXit", то квик выдаст ошибку, закроет скрипт и больше не даст запускать новые, до своего перезапуска.

9

Re: QUik вылетает после остановки скрипта

sam063rus пишет:

попробуйте добавить collectgarbage() в "майне" перед sleep(300)

p.s. а вообще, надо приводить по-возможности весь скрипт, а не какой-то неинформативный кусочек. остаётся лишь догадываться сколько у вас там модулей и виртуальных машин (скорей всего две...)


p.p.s. также проверьте срабатывание этого условия:

if SN == "Exit" or SN == "myForm" then 
myForm:Release() 
vcl=nil   
end

и лучше, не размещать на одной строке несколько комманд, а также в repeat задавать условие ЯВНО - если "nil" - значит, nil, если "0", значит, "0", т.к. это не одно и невсегда одно и тоже.


Всё перепробовал, но не помогает. Терминал перестал вылетать, но при этом всё равно выдаёт ошибку.