Sergey Gorokhov написал: В Lua машине 5.3.5 нет такой функции как lua_call (). Есть её аналог lua_callk.Используйте ее.Либо добавьте в свой код что то вроде этого:#define lua_call(L,n,r) lua_callk(L, (n), ®, 0, NULL)
Именно так и сделано в штатном файле lua.h из Lua 5.3.5 - lua_call является вызовом lua_callk Вот пример для воспроизведения:
Latrop написал: Примитивная dll в OnAllTrade просто дергать напр getInfoParam("VERSION") и больше вообще ничего, никаких эксепшенов, но после коннекта и получения прим 50-100 тыс тиков валится:
Critical error ACCESS_VIOLATION in script...
Что это за беда такая может быть?...
Если в OnAllTrade вообще ничего не делать, пустышка, то не падает. Но такой способ обхода проблемы не очень подходит :)
Добрый день,
К сожалению, нам не удалось по присланным данным воспроизвести ошибку. Если это возможно, пришлите пример кода, работа с которым приводит к сбою.
подскажите, а для чего вообще вы хотите запускать корутины как треды в lua? это небезопасно и неуправляемо. не лучше ли использовать для этого разные скрипты?
ну, в том, что если квик завершит работу вашего скрипта, то про ваши потоки он ничего не знает, и если они не успели остановиться - то все, привет. можно ухищряться, я делал через и отладку, и через сборщик мусора, но все равно, это невозможно сделать нормально. а, кроме того, это работает только для квика, а не вообще в lua. им нужно было питон встраивать, а не lua, не было бы проблем.
Цитата
quio написал: А если этим потокам нужно взаимодействовать?
rst9 написал: в том, что если квик завершит работу вашего скрипта, то про ваши потоки он ничего не знает, и если они не успели остановиться - то все, привет
Конечно, не знает. Скрипт сам долежен корректно завершать свои потоки, что он у меня успешно и делает. Выбор Lua в качестве интерпретатора скриптов, на мой взгляд, было отличным решением разработчиков. Этот язык прекрасно подходит для задач, для которых он там используется. Раньше немного расстраивало, что версия языка использована устаревшая. Главное, что бы он работал без глюков. Ну и хотелось бы более глубокой интеграции.
В частности до сих пор (8.4) часто бывает невозможно заказать обезличенные сделки, если не открыта таблица обезличенных сделок. Почему-то этот косяк все никак не устранят.
rst9 написал: им нужно было питон встраивать, а не lua, не было бы проблем.
проблем было бы больше в разы lua идеален для встраивания. это точно грамотный выбор и не только в АРКА.
вот если бы еще давали своих клиентов к их серверам коннектить за маленькие пятачки было бы вапще шоколадно но это фантастика , тк нифига не омерика :)
lua машина - принципиально однопоточная, за счет этого она такая быстрая и легкая. то, что ее для квика перелопатили так, чтобы она не валилась при вызове из разных потоков - решение спорное, качество этих доработок неизвестно (ну, точнее, известно, и оно так себе). питон точно такой же расширяемый язык и он от рождения нормально переваривает треды. да, там есть gil, но чтобы lua стала многопоточной, в нее добавили такой же gil, только хуже и сделанный на коленке.
rst9 написал: питон точно такой же расширяемый язык и он от рождения нормально переваривает треды.
это холивар уровня: что лучше - шарп или кресты.
про реализацию qlua vm всё может быть и так, но тут есть куда рости и есть контроль lua это про стандарты, оптимальность и контроль
многочисленные примеры - и питон один из них - показывают, что безудержное развивание в интересах средних прогеров или вообще непрогеров приводит к потере всего, что нужно ценить и беречь: стандарты, оптимальность и контроль
тут либо есть уровень понимания, либо нет ... ну или нигилизм и пофигизм ... имо
Anton написал: Верните из OnStop 72 часа и завершайтесь сколько влезет.
простите, я не знал, что сдесь форум специалистов по костылям. вам вопрос "со звездочкой": если другая библиотека, не ваша, выкинула ошибку, спровоцировала панику, куда отправляется ваш способ?
Цитата
новичок написал: lua это про стандарты, оптимальность и контроль
вы это серьезно? луа в квике это про стандарты и контроль? я не ослышался? да половину библиотек нельзя использовать с квиком без ограничений из-за того, что луа в квике нестандартная.
так вы не lua используете, а qlua. считайте другой язык. lua - да, у нее много преимуществ а qlua - совсем другое, это диалект, у нее другие свойства, частичная совместимость...
rst9 написал: вам вопрос "со звездочкой": если другая библиотека, не ваша, выкинула ошибку, спровоцировала панику
Это как? Мой скрипт сидит в квике в отдельной луа-машине. Если я не умею обрабатывать ошибки в своей либе, то да, мне не надо потоков запускать, и, по-хорошему, вообще библиотек писать не надо, а надо улицы подметать.
rst9 написал: так вы не lua используете, а qlua. считайте другой язык. lua - да, у нее много преимуществ а qlua - совсем другое, это диалект, у нее другие свойства, частичная совместимость...
беда у вас с логикой. темой изначально был выбор lua vs python еще старайтесь :)
у вас беда с глазами. изначально темой была ошибка при создании при помощи luaL_newstate(). а питон я вспомнил в контексте перекурочивания lua и превращения его в поделие qlua. попробуйте треды позапускайте в корутинах обычной lua, я на вас посмотрю.
Anton написал: Если я не умею обрабатывать ошибки в своей либе, то да, мне не надо потоков запускать, и, по-хорошему, вообще библиотек писать не надо, а надо улицы подметать.
ок, раз вы такой гуру... можете сделать библиотеку, которая будет реализовывать одну (две, минимальное количество) функций, которые будут позволять написать что-то вроде:
Код
tlib = require "mylib"
function threadfunc(astr)
message(astr, 1);
while true do
--
end
end
function main()
thread = tlib.CreateThread(threadfunc, "hello, world from thread")
while true do
--
end
end
и попробуйте сделать так, чтобы квик не валился при остановке скрипта, что бы пользователь внутри (хотя бы на lua, оставим за скобкой чужой код в библиотеках) не написал.
не, серьезно, я вас не поддеть хочу. я попытался, у меня вышло средне. если погуглите - найдете даже репу, она MIT.
А вы можете сделать такую же библиотеку на сях? Ну то есть вы стартанули тред, вызвали в нем произвольную юзерскую функцию и... как вы будете его останавливать, если понадобится? При чем тут квик, при чем тут луа, в такой форме задача не решается нигде.
quio написал: Гопода, это тема про ошибки в Квик 8.5, что весьма актуально
эту тему начал я, и арка уже отписалась, что решат проблему после дождичка в четверг. если у вас другая проблема, нежели в 1 сообщении - создайте новую тему, посвященную ей.
Цитата
Anton написал: При чем тут квик, при чем тут луа, в такой форме задача не решается нигде.
так уж нигде? ответ - операционная система. :) если я - хост вашей либы и либа стартанула тред (я, к примеру, знаю, что либа может стартануть тред), то, по факту, я могу.
о-о-о... как все запущено. навскидку знаю несколько способов 1. toolhelp/psapi/whatever 2. виртуализация 3. отладка ... кстати, в lua я решал эту проблему через отладку.
rst9 написал: у вас беда с глазами. изначально темой была ошибка при создании при помощи luaL_newstate(). а питон я вспомнил в контексте перекурочивания lua и превращения его в поделие qlua. попробуйте треды позапускайте в корутинах обычной lua, я на вас посмотрю.
изначально ошибка в том, что вы чужой серый ящик пытаетесь просверлить неодобрительным взглядом
у меня нет ни времени, ни желания погружаться в чужие головоломки. зачем?
этот кое-как фронтенд подходит для кое-каких действий требовать от микро-луа-машины победы в формуле это еще тот закидон всё что тут криво или не работает нужно сделать самому на сях
а глаза - да, надо бы закапывать иногда. купил уже средство :)
никто. если я запускаю вас в своем сендбоксе, то я тупо уничтожу сендбокс. ровно так как поступает квик при тайм-ауте. делает killthread() и уничтожает luavm.
ЧТД, задача не решается нигде. Просто киллнуть тред - не стоило и разговор затевать, все и так это умеют. А хэндлы у вас тоже в сандбоксе? При некоторой удаче вы всю винду так свалите, не то что хост свой.
вы глупый что ли? мне не нужно вызывать ваши дуструкторы, если я могу просто виртуализировать для вас аллокатор памяти и убить все скопом не разбираясь.
rst9 написал: и, кстати, арка текнолоджис, у меня вам предложение: может вы сделаете апи для тредов, раз уж вы все равно родили диалект lua под названием qlua?
Опишите более развернуто что именно Вы хотите получить
Sergey Gorokhov написал: Опишите более развернуто что именно Вы хотите получить
например, что-то подобное... LUA:
Код
function threadfunc(...)
while not CuttentThreadTerminated do
--
end
end
thread = CreateThread(threadfunc, ...)
thread.TerminateThread()
thread.Join()
thread = nil
collectgarbage()
Sergey Gorokhov написал: Опишите более развернуто что именно Вы хотите получить
например, что-то подобное... LUA:
Код
function threadfunc ( .. .)
while not CuttentThreadTerminated do
--
end
end
thread = CreateThread(threadfunc, .. .)
thread.TerminateThread ()
thread.Join ()
thread = nil
collectgarbage()
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.