sam063rus пишет: скрипт полностью закончит свою работу, а вместе с ним и его виртуальная машина полностью закончит работу/будет разрушена?
Недавно мы столкнулись с проблемой очистки памяти после остановки скрипта. Если не считать ее, то да, так и должно быть.
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 14:14:49
Цитата
sam063rus пишет: задам другой вопрос: значит ли, что: когда основное тело скрипта выполнится и при условии отсутствия каких-либо колбеков в скрипте (за исключением OnStop), а также при отсутствии в скрипте функции main - скрипт полностью закончит свою работу, а вместе с ним и его виртуальная машина полностью закончит работу/будет разрушена?
package.cpath=getScriptPath().."\\?.dll"
package.path=getScriptPath().."\\?.lua"
require("vcl")
main_window = VCL.Form("mainForm")
main_window._ = {Caption = "simple bot", Height = 150, Width = 150, On Close = "asd"}
main_window:Show()
function asd()
main_window:Free()
end
Не трудно заметить, что окно вполне себе нормально живёт и реагирует на внешние события, несмотря на то, что кнопка "Остановить", нам "каГбэ" намекает, что останавливать-то по сути и нечего - всё уже как бы и так стоит.
Если Вы на это мне скажете, что вот мол, у меня тут есть свой OnClose - я могу привести другую картинку без него - просто окно закрываться перестанет, а все свои стандартные функции, такие как: обновление, обработка других оконных сообщений - оно продолжает исправно выполнять.
данный пример скрипта - закрывает окно только при закрытии квика, что немудренно - т.к. OnStop и OnClose (vcl-овский) - отсутствуют.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
24.02.2015 14:38:09
Перепишите вот так функцию asd() из первого кода, будет интересней :)
Код
function asd()
message('Close', 2)
main_window:Free()
end
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 14:46:43
Цитата
Серж пишет: Перепишите вот так функцию asd() из первого кода, будет интересней
Код
function asd()
message('Close', 2)
main_window:Free()
end
ну и?
тут разговор о том, что заявленные "тезисы" разработчиков - не работают.
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 14:52:05
to разработчикам,
вместо того, чтоб выпускать "сырой" продукт на рынок и за столь долгое время так и не сумев не то, чтоб "допилить" его до товарного вида но, хотя бы даже самим изучить/быть в курсе, как это "чудо" работает, предлагаю отдать qlua в опенсорс. Один хрен, пользователи за вас делают Вашу работу. Так хоть не надо будет им более, что-то объяснять/оправдывать и постоянно допиливать/регистрировать не сбыточные пожелания.
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 15:14:54
Для всех заинтересованных лиц: взято из "их" м-м, э... "документации":
Цитата
main
Функция, реализующая основной поток выполнения в скрипте. Для ее выполнения терминал QUIK создает отдельный поток. Скрипт считается работающим, пока работает функция main(). При завершении работы функции main() скрипт переходит в состояние «остановлен». Если скрипт находится в состоянии «остановлен», то не происходит вызовов функций обработки событий терминала QUIK, содержащихся в этом скрипте.
порвите её и выкиньте.
Michael Bulychev
Гость
24.02.2015 16:53:42
Добрый день. Давайте немного успокоимся и сбавим тон. Есть ошибка - при завершении скрипта с ошибкой не освобождаются ресурсы Lua. Ровно эту картину Вы и наблюдаете - main отсутствует, но ресурсы не освобождены, библиотека не выгружена. Именно она и обрабатывает все события на этой форме. Эта ошибка будет исправлена.
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 16:56:30
а я уж думал, что Вы мне не ответите. Рад, что наконец удалось "достучаться".
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 17:01:17
осталось только спросить: от "main" в перспективе - нет планов отказываться?
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 17:03:09
Цитата
Michael Bulychev пишет: при завершении скрипта с ошибкой не освобождаются ресурсы Lua.
дело в том, что ошибки в приведённом скрипте, как таковой и нет.
Michael Bulychev
Гость
24.02.2015 17:08:55
Цитата
sam063rus пишет: осталось только спросить: от "main" в перспективе - нет планов отказываться?
Michael Bulychev пишет: при завершении скрипта с ошибкой не освобождаются ресурсы Lua.
дело в том, что ошибки в приведённом скрипте, как таковой и нет.
В скрипте нет. В чем ошибка я уже рассказал выше.
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 17:18:14
Цитата
Sergey Gorokhov пишет: из материалов с других форумов - мы знаем, что "main" запускается (а вместе с ней и создаётся отдельный поток) после колбека "OnInit" - значит ли это , что, если в скрипте не будет прописан колбек OnInit - то и для функции "main" не будет создан отдельный поток???
------------------------- Нет не значит.
Правильный ответ: проверяем есть ли в скрипте OnInit - если есть и он завершился без ошибки то, можно смело запускать поток и вызывать в нём "де-факто"-колбек "main". Если же OnInit нет то, просто пытаемся создать поток и запустить в нём "main" ----------------------- А вообще-то, с проверок и надо было начинать: если нет "майна", то и не должно быть создания потока. Это одна из Ваших ошибок.
Sergey Gorokhov пишет: из материалов с других форумов - мы знаем, что "main" запускается (а вместе с ней и создаётся отдельный поток) после колбека "OnInit" - значит ли это , что, если в скрипте не будет прописан колбек OnInit - то и для функции "main" не будет создан отдельный поток???
------------------------- Нет не значит.
Правильный ответ: проверяем есть ли в скрипте OnInit - если есть и он завершился без ошибки то, можно смело запускать поток и вызывать в нём "де-факто"-колбек "main". Если же OnInit нет то, просто пытаемся создать поток и запустить в нём "main" ----------------------- А вообще-то, с проверок и надо было начинать: если нет "майна", то и не должно быть создания потока. Это одна из Ваших ошибок.
Вы не правы, ошибка была совсем в другом. Никакого потока в Вашем коде не создается.
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 17:29:26
Цитата
Michael Bulychev пишет: Никакого потока в Вашем коде не создается.
Функция, реализующая основной поток выполнения в скрипте. Для ее выполнения терминал QUIK создает отдельный поток. Скрипт считается работающим, пока работает функция main(). При завершении работы функции main() скрипт переходит в состояние «остановлен». Если скрипт находится в состоянии «остановлен», то не происходит вызовов функций обработки событий терминала QUIK, содержащихся в этом скрипте.
С точки зрения самого QUIK здесь нет противоречия :) : "Скрипт считается работающим, пока работает функция main()". Кнопка "Остановить" активируется только, когда начинает работать main(). Соответственно, если main() отсутствует в коде скрипта, то и кнопка "Остановить" не активируется. Работает так, как описано в документации. Или описано так, как реализовано. :) Просто факты.
sam063rus, как по-вашему, как должен повести себя скрипт, что должно произойти с формой в ?
Надо делать так, как надо. А как не надо - делать не надо.
В Вашем примере дополнительных потоков нет. Все работает пока на закрыта Lua и не выгружена библиотека vcl.dll
Пользователь
Сообщений: Регистрация: 01.02.2015
24.02.2015 21:28:21
Михаил, у меня к Вам нет больше никаких вопросов. всё, что я хотел - я уже узнал.
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 12:12:30
В новой версии quik (6.17.0.58 ) были наконец, устранены некоторые недочёты в qlua и "позорный" пример скрипта теперь ведёт себя надлежащим образом. То есть окно практически сразу закрывается только появившись, с последующей остановкой скрипта. скрипт можно весело "передёргивать", не боясь "подвесить" quik.
ОДНАКО!!! тестовый запуск широкоизвестного привода: а точнее, его остановка привёл к закономерному краху системы и вдобавок, квик просит послать отчёт к такой-то матери. Попытаюсь расписать подробно: 1. при закрытии привода крестиком окна или через меню - скрипт закрывается. 2. если закрыть через меню скрипт при включенной кнопке "Run" (в скрипте) - quik примерно на минуту зависает с выдачей вот этого: 3. если после всего этого закрыть меню "доступные скрипты" - опять (теперь уже короткое) зависание, после чего аварийное закрытие квика и предложение отправить отчёт к такой-то матери.
резюме: в общем, в таком виде, доверять qlua-скриптам свой кошелёк однозначно не стоит. похоже её ещё нескоро допилят до товарного вида.
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 12:29:27
для особонепонятливых: прошу обратить внимание на то, что скрипт в меню находится в остановленном состоянии (красный квадратик), а в комбобоксе - куча сыплющихся null. стало быть, заявленный тезис о том, что по завершении скрипта - его luastate и LUA VM тоже разрушаются и останавливаются считаю В КОРНЕ НЕ ВЕРНЫМ!
Michael Bulychev
Гость
26.03.2015 12:32:18
Добрый день. Если есть дамп для изучения - присылайте, посмотрим.
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 12:36:51
к сожалению, не могу. это не сочетается с моей политикой IT-безопасности. т.к.в нём содержится нетолько относящаяся к системе quik информация.
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 12:38:00
вы можете попытаться сами воспроизвести все шаги, которые я специально для этого указал. ссылки на тестовый привод - тоже есть.
Michael Bulychev
Гость
26.03.2015 12:41:29
Если бы я это воспроизвел, то не просил бы Вас прислать дампы. Только что скачал с сайта эту программу и не смог получить такой эффект. А какую информацию из мини дампа Вы считаете критичной для своей безопасности?
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 12:46:32
очевидно разработчики у нас самые удачливые, что у них нет никаких проблем. только вот у людей вокруг от этого проблем - не меньше и если даже бегло заглянуть на сайт привода - то нетрудно заметить, что проблемы нетолько у меня одного.
Michael Bulychev
Гость
26.03.2015 12:51:09
Вот последнее сообщение на форуме (я так понимаю от разработчиков)
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 13:03:02
в этом сообщении - есть одно слово: "вроде работает корректно". так вот, не работает оно корректно, без всяких "вроде".
и ещё, процесс winros.exe при аварийном завершении квика не выгрузился, что можно также легко проверить заглянув в диспетчер программ в windows. а если его вручную не "убить" - то нельзя подключиться к серверу - пишет, что "вы уже работаете в системе"
Michael Bulychev
Гость
26.03.2015 13:24:08
Декомпилировать скрипты желания нет, без дампа разбираться не получится. Процесс winros.exe никак не связан с коннектом к серверу. Если Вы не используете экспорт данных в метасток или омегу, то можете удалить из каталога с терминалом файлы iwr.dll и winros.exe
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
26.03.2015 13:36:35
Цитата
Michael Bulychev пишет: А какую информацию из мини дампа Вы считаете критичной для своей безопасности?
Также интересует этот вопрос. Какая информация содержится в дампе?
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 13:52:43
Код
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [..\dmp\info_20150326_124339.dmp]
User Mini Dump File: Only registers, stack and portions of memory are available
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
x86 compatible
Product: WinNt, suite: SingleUserTS
Machine Name:
Debug session time: Thu Mar 26 12:43:40.000 2015 (GMT+4)
System Uptime: not available
Process Uptime: 0 days 0:22:08.000
................................................................
..................................................
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(df4.fe8): Access violation - code c0000005 (first/second chance not available)
eax=00009ed0 ebx=0fdac8e4 ecx=c0000005 edx=00000000 esi=000004d4 edi=00000000
eip=7c90e514 esp=0022df6c ebp=0022dfd0 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
ntdll!KiFastSystemCallRet:
7c90e514 c3 ret
так пойдёт?
Michael Bulychev
Гость
26.03.2015 14:12:36
выполните !analyze -v
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 14:14:39
почему-то не могу добавить сообщение на форум...
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 14:29:40
Скрытый текст
Скрытый текст
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 15:43:28
и тишина...
Michael Bulychev
Гость
26.03.2015 17:35:40
Пришлите нам дамп падения и подробное описание действий, которые приводят к падению. У меня не получается воспроизвести ошибку.
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 19:10:36
Цитата
Michael Bulychev пишет: Пришлите нам дамп падения и подробное описание действий
отправил распечатку дампа. если вам этого недостаточно - быть может, вам стоит задуматься над сменой места работы (при всё относительном уважении к вам...) to работодателям "арки" - вы, очевидно, меценаты, раз за 15 лет несмогли поставить на место своих программеров.
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 19:13:34
и ещё, советую вам (и многим другим "разработчикам") посмотреть мультик про страуса, зарывающего свою голову в песок.... полагаю, те кто, действительно, понял - уже давно всё понял...
Пользователь
Сообщений: Регистрация: 01.02.2015
26.03.2015 19:40:09
Цитата
Серж пишет: Также интересует этот вопрос. Какая информация содержится в дампе?
1. прочитайте ещё раз название темы.... И, если вы по-прежнему возомните себя разработчиком - тогда итолько тогда быть может поговорим... 2. если и опять не дойдёт... - посмотрите в "интернетах" инфу (только не от microsoft), что действительно включается в файлы дампа...
Серж пишет: Также интересует этот вопрос. Какая информация содержится в дампе?
1. прочитайте ещё раз название темы.... И, если вы по-прежнему возомните себя разработчиком - тогда итолько тогда быть может поговорим...
Чего вы так напряглись-то? Вопрос был задан без "подковырки". Я ведь тоже дампы отсылаю разработчикам. А то вдруг чего лишнего в дампе окажется... Но, если вы не знаете, то, конечно, посмотрю "интернетах". Не обижайтесь.
Надо делать так, как надо. А как не надо - делать не надо.
Michael Bulychev
Гость
27.03.2015 05:06:47
Добрый день. Сергей, вот по этой ссылке можно прочитать об информации, которая сохраняется в минидампе. Кирилл, если дамп прислать невозможно, то опишите подробно по шагам последовательность действий (можно с картинками), попытаемся воспроизвести у себя.
весьма интересно откуда у вас это имя? я его нигде не давал. и значит ли это, что и я вправе распоряжаться вашими личными данными по своему усмотрению, а также, общаться с вами по вашему личному email?.... (на этот вопрос требуется обязательный ответ)
Цитата
Michael Bulychev пишет: опишите подробно по шагам последовательность действий (можно с картинками), попытаемся воспроизвести у себя.
Михаил, специально для этого я расписал выше, как я этого добился. Честно сказать, мне уже надоел этот троллинг со стороны разработчиков, советую ещё раз пересмотреть мультфильм про страуса, зарывающего голову в песок. (без обид)
Michael Bulychev
Гость
27.03.2015 06:41:33
Прямо сейчас я не вспомню точно где я видел Ваше имя. Да, если Вам удобнее, можете писать мне в почту, оставлять личные сообщения. Пошли уже вторые сутки как я пытаюсь получить от Вас дополнительные сведения об ошибке. Что хранится в минидампе я привел по ссылке выше, там нет никаких секретных данных о Вас. Мне удалось вызвать ошибку у себя, но я не уверен что это описанный Вами случай. Случается это в ситуации когда привод выбрасывает MessageBox с ошибкой или сообщением и в этот момент попытаться остановить скрипт. Либо нажать на кнопку Run и попытаться остановить скрипт из терминала. В этом случае привод так же не реагирует на действия пользователя и пишет какой-то лог в сотни мегабайт. В обоих случаях стек падения не содержит qlua.dll и выглядит примерно так:
Michael Bulychev пишет: Либо нажать на кнопку Run и попытаться остановить скрипт из терминала.
этот случай я тоже расписал: кнопка RUN в скрипте включена далее, останавливаю скрипт из меню квика - происходит описанное выше. ----------------
Ваша задача, как разработчиков, обеспечить 100%-ную стабильность квика и тем самым 100% исключить "зависания", аварийные остановы. Вы похоже совсем не пытаетесь нас понять - наши скрипты управляют нашими, РЕАЛЬНЫМИ деньгами и пусть лучше скрипт остановится, чем квик "зависнит" из-за этого. так хоть у пользователя будет меньше времени затрачено на ьто, чтоб его "передёрнуть". В идеале, мы хотим от вас получить фреймворк в котором не надо целый день приглядывать за скриптами, а можно оставить их хоть на целый день.
я, конечно, понимаю, что многое в этом вопросе зависит и от скриптописателей но, как не трудно заметить, есть и куча "косяков" с вашей стороны. и при том, вы (арка с её technologies) абсолютно никак финансово не компенсируете нам, конечным пользователям результаты своих "огрехов".
---------------------- p.s. я больше не буду продолжать развивать эту тему бо как мне моя нервная система дороже. так что, делайте уже, что хотите. пользователи со временем, сами во всём разберуться, поймут вас и накажут тем, что просто будут закрывать счета у тех наших российских "недоброкеров", которые даже не в состоянии позволить иметь у себя СВОЙ торговый терминал. и даже привязка к аренде платформы ваших серверов ни их, ни вас не спасёт. 15 лет прошло с начала вашего проекта под названием quik. Спрашивается, где итоги? Почему платформа до сих пор не стабильна? (это риторический вопрос - ответ не обязателен и не отслеживается)
Пользователь
Сообщений: Регистрация: 01.02.2015
27.03.2015 07:07:43
Цитата
Michael Bulychev пишет: Либо нажать на кнопку Run и попытаться остановить скрипт из терминала. В этом случае привод так же не реагирует на действия пользователя и пишет какой-то лог в сотни мегабайт.
красный квадратик на картинке и продолжающиеся сыпаться null в combobox красноречиво каГбе намекают нам, что скрипт УЖЕ остановлен и по идее уже не должно быть никаких сотен мегабайт логописательства и выбрасывания нулевых указателей.