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 - я могу привести другую картинку без него - просто окно закрываться перестанет, а все свои стандартные функции, такие как: обновление, обработка других оконных сообщений - оно продолжает исправно выполнять.
вместо того, чтоб выпускать "сырой" продукт на рынок и за столь долгое время так и не сумев не то, чтоб "допилить" его до товарного вида но, хотя бы даже самим изучить/быть в курсе, как это "чудо" работает, предлагаю отдать qlua в опенсорс. Один хрен, пользователи за вас делают Вашу работу. Так хоть не надо будет им более, что-то объяснять/оправдывать и постоянно допиливать/регистрировать не сбыточные пожелания.
Для всех заинтересованных лиц: взято из "их" м-м, э... "документации":
Цитата
main
Функция, реализующая основной поток выполнения в скрипте. Для ее выполнения терминал QUIK создает отдельный поток. Скрипт считается работающим, пока работает функция main(). При завершении работы функции main() скрипт переходит в состояние «остановлен». Если скрипт находится в состоянии «остановлен», то не происходит вызовов функций обработки событий терминала QUIK, содержащихся в этом скрипте.
Добрый день. Давайте немного успокоимся и сбавим тон. Есть ошибка - при завершении скрипта с ошибкой не освобождаются ресурсы Lua. Ровно эту картину Вы и наблюдаете - main отсутствует, но ресурсы не освобождены, библиотека не выгружена. Именно она и обрабатывает все события на этой форме. Эта ошибка будет исправлена.
Sergey Gorokhov пишет: из материалов с других форумов - мы знаем, что "main" запускается (а вместе с ней и создаётся отдельный поток) после колбека "OnInit" - значит ли это , что, если в скрипте не будет прописан колбек OnInit - то и для функции "main" не будет создан отдельный поток???
------------------------- Нет не значит.
Правильный ответ: проверяем есть ли в скрипте OnInit - если есть и он завершился без ошибки то, можно смело запускать поток и вызывать в нём "де-факто"-колбек "main". Если же OnInit нет то, просто пытаемся создать поток и запустить в нём "main" ----------------------- А вообще-то, с проверок и надо было начинать: если нет "майна", то и не должно быть создания потока. Это одна из Ваших ошибок.
Sergey Gorokhov пишет: из материалов с других форумов - мы знаем, что "main" запускается (а вместе с ней и создаётся отдельный поток) после колбека "OnInit" - значит ли это , что, если в скрипте не будет прописан колбек OnInit - то и для функции "main" не будет создан отдельный поток???
------------------------- Нет не значит.
Правильный ответ: проверяем есть ли в скрипте OnInit - если есть и он завершился без ошибки то, можно смело запускать поток и вызывать в нём "де-факто"-колбек "main". Если же OnInit нет то, просто пытаемся создать поток и запустить в нём "main" ----------------------- А вообще-то, с проверок и надо было начинать: если нет "майна", то и не должно быть создания потока. Это одна из Ваших ошибок.
Вы не правы, ошибка была совсем в другом. Никакого потока в Вашем коде не создается.
Функция, реализующая основной поток выполнения в скрипте. Для ее выполнения терминал QUIK создает отдельный поток. Скрипт считается работающим, пока работает функция main(). При завершении работы функции main() скрипт переходит в состояние «остановлен». Если скрипт находится в состоянии «остановлен», то не происходит вызовов функций обработки событий терминала QUIK, содержащихся в этом скрипте.
С точки зрения самого QUIK здесь нет противоречия :) : "Скрипт считается работающим, пока работает функция main()". Кнопка "Остановить" активируется только, когда начинает работать main(). Соответственно, если main() отсутствует в коде скрипта, то и кнопка "Остановить" не активируется. Работает так, как описано в документации. Или описано так, как реализовано. :) Просто факты.
sam063rus, как по-вашему, как должен повести себя скрипт, что должно произойти с формой в вашем примере?
Надо делать так, как надо. А как не надо - делать не надо.
В новой версии quik (6.17.0.58 ) были наконец, устранены некоторые недочёты в qlua и "позорный" пример скрипта http://forum.quik.ru/messages/forum10/message1350/topic176/#message1350 теперь ведёт себя надлежащим образом. То есть окно практически сразу закрывается только появившись, с последующей остановкой скрипта. скрипт можно весело "передёргивать", не боясь "подвесить" quik.
ОДНАКО!!! тестовый запуск широкоизвестного привода: http://mycreditcard.ru/programs/intraday-lua.html а точнее, его остановка привёл к закономерному краху системы и вдобавок, квик просит послать отчёт к такой-то матери. Попытаюсь расписать подробно: 1. при закрытии привода крестиком окна или через меню - скрипт закрывается. 2. если закрыть через меню скрипт при включенной кнопке "Run" (в скрипте) - quik примерно на минуту зависает с выдачей вот этого:
3. если после всего этого закрыть меню "доступные скрипты" - опять (теперь уже короткое) зависание, после чего аварийное закрытие квика и предложение отправить отчёт к такой-то матери.
резюме: в общем, в таком виде, доверять qlua-скриптам свой кошелёк однозначно не стоит. похоже её ещё нескоро допилят до товарного вида.
для особонепонятливых: прошу обратить внимание на то, что скрипт в меню находится в остановленном состоянии (красный квадратик), а в комбобоксе - куча сыплющихся null. стало быть, заявленный тезис о том, что по завершении скрипта - его luastate и LUA VM тоже разрушаются и останавливаются считаю В КОРНЕ НЕ ВЕРНЫМ!
Если бы я это воспроизвел, то не просил бы Вас прислать дампы. Только что скачал с сайта эту программу и не смог получить такой эффект. А какую информацию из мини дампа Вы считаете критичной для своей безопасности?
очевидно разработчики у нас самые удачливые, что у них нет никаких проблем. только вот у людей вокруг от этого проблем - не меньше и если даже бегло заглянуть на сайт привода - то нетрудно заметить, что проблемы нетолько у меня одного.
в этом сообщении - есть одно слово: "вроде работает корректно". так вот, не работает оно корректно, без всяких "вроде".
и ещё, процесс winros.exe при аварийном завершении квика не выгрузился, что можно также легко проверить заглянув в диспетчер программ в windows. а если его вручную не "убить" - то нельзя подключиться к серверу - пишет, что "вы уже работаете в системе"
Декомпилировать скрипты желания нет, без дампа разбираться не получится. Процесс winros.exe никак не связан с коннектом к серверу. Если Вы не используете экспорт данных в метасток или омегу, то можете удалить из каталога с терминалом файлы iwr.dll и winros.exe
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 пишет: Пришлите нам дамп падения и подробное описание действий
отправил распечатку дампа. если вам этого недостаточно - быть может, вам стоит задуматься над сменой места работы (при всё относительном уважении к вам...) to работодателям "арки" - вы, очевидно, меценаты, раз за 15 лет несмогли поставить на место своих программеров.
и ещё, советую вам (и многим другим "разработчикам") посмотреть мультик про страуса, зарывающего свою голову в песок.... полагаю, те кто, действительно, понял - уже давно всё понял...
Серж пишет: Также интересует этот вопрос. Какая информация содержится в дампе?
1. прочитайте ещё раз название темы.... И, если вы по-прежнему возомните себя разработчиком - тогда итолько тогда быть может поговорим... 2. если и опять не дойдёт... - посмотрите в "интернетах" инфу (только не от microsoft), что действительно включается в файлы дампа...
Серж пишет: Также интересует этот вопрос. Какая информация содержится в дампе?
1. прочитайте ещё раз название темы.... И, если вы по-прежнему возомните себя разработчиком - тогда итолько тогда быть может поговорим...
Чего вы так напряглись-то? Вопрос был задан без "подковырки". Я ведь тоже дампы отсылаю разработчикам. А то вдруг чего лишнего в дампе окажется... Но, если вы не знаете, то, конечно, посмотрю "интернетах". Не обижайтесь.
Надо делать так, как надо. А как не надо - делать не надо.
Добрый день. Сергей, вот по этой ссылке http://www.debuginfo.com/articles/effminidumps.html#minidumpnormal можно прочитать об информации, которая сохраняется в минидампе. Кирилл, если дамп прислать невозможно, то опишите подробно по шагам последовательность действий (можно с картинками), попытаемся воспроизвести у себя.
весьма интересно откуда у вас это имя? я его нигде не давал. и значит ли это, что и я вправе распоряжаться вашими личными данными по своему усмотрению, а также, общаться с вами по вашему личному email?.... (на этот вопрос требуется обязательный ответ)
Цитата
Michael Bulychev пишет: опишите подробно по шагам последовательность действий (можно с картинками), попытаемся воспроизвести у себя.
Михаил, специально для этого я расписал выше, как я этого добился. Честно сказать, мне уже надоел этот троллинг со стороны разработчиков, советую ещё раз пересмотреть мультфильм про страуса, зарывающего голову в песок. (без обид)
Прямо сейчас я не вспомню точно где я видел Ваше имя. Да, если Вам удобнее, можете писать мне в почту, оставлять личные сообщения. Пошли уже вторые сутки как я пытаюсь получить от Вас дополнительные сведения об ошибке. Что хранится в минидампе я привел по ссылке выше, там нет никаких секретных данных о Вас. Мне удалось вызвать ошибку у себя, но я не уверен что это описанный Вами случай. Случается это в ситуации когда привод выбрасывает MessageBox с ошибкой или сообщением и в этот момент попытаться остановить скрипт. Либо нажать на кнопку Run и попытаться остановить скрипт из терминала. В этом случае привод так же не реагирует на действия пользователя и пишет какой-то лог в сотни мегабайт. В обоих случаях стек падения не содержит qlua.dll и выглядит примерно так:
Michael Bulychev пишет: Либо нажать на кнопку Run и попытаться остановить скрипт из терминала.
этот случай я тоже расписал: кнопка RUN в скрипте включена далее, останавливаю скрипт из меню квика - происходит описанное выше. ----------------
Ваша задача, как разработчиков, обеспечить 100%-ную стабильность квика и тем самым 100% исключить "зависания", аварийные остановы. Вы похоже совсем не пытаетесь нас понять - наши скрипты управляют нашими, РЕАЛЬНЫМИ деньгами и пусть лучше скрипт остановится, чем квик "зависнит" из-за этого. так хоть у пользователя будет меньше времени затрачено на ьто, чтоб его "передёрнуть". В идеале, мы хотим от вас получить фреймворк в котором не надо целый день приглядывать за скриптами, а можно оставить их хоть на целый день.
я, конечно, понимаю, что многое в этом вопросе зависит и от скриптописателей но, как не трудно заметить, есть и куча "косяков" с вашей стороны. и при том, вы (арка с её technologies) абсолютно никак финансово не компенсируете нам, конечным пользователям результаты своих "огрехов".
---------------------- p.s. я больше не буду продолжать развивать эту тему бо как мне моя нервная система дороже. так что, делайте уже, что хотите. пользователи со временем, сами во всём разберуться, поймут вас и накажут тем, что просто будут закрывать счета у тех наших российских "недоброкеров", которые даже не в состоянии позволить иметь у себя СВОЙ торговый терминал. и даже привязка к аренде платформы ваших серверов ни их, ни вас не спасёт. 15 лет прошло с начала вашего проекта под названием quik. Спрашивается, где итоги? Почему платформа до сих пор не стабильна? (это риторический вопрос - ответ не обязателен и не отслеживается)
Michael Bulychev пишет: Либо нажать на кнопку Run и попытаться остановить скрипт из терминала. В этом случае привод так же не реагирует на действия пользователя и пишет какой-то лог в сотни мегабайт.
красный квадратик на картинке и продолжающиеся сыпаться null в combobox красноречиво каГбе намекают нам, что скрипт УЖЕ остановлен и по идее уже не должно быть никаких сотен мегабайт логописательства и выбрасывания нулевых указателей.