Переделал. Запилил вот такой код, все остальные асинхроны вырубил. Все равно крашит. Что может быть не так? Проверку не обходят, потоки в асинхронной функции успевают завершиться, проверял вручную и при помощи чата, куда выводил состояние асинхронного потока. Перед началом другого он всегда принимал значение Dead. Но все равно крашит. Может что-то не так?
Уже подустал ломать голову над этой задачей. В лог вообще ничего не выводит. Вылетает именно игра.
Асинхроны не встречаются, понятия не имею, что не так.
Уже подустал ломать голову над этой задачей. В лог вообще ничего не выводит. Вылетает именно игра.
Асинхроны не встречаются, понятия не имею, что не так.
Lua:
settings.threadtwo = lua_thread.create(onGetCasefile) -- пример запуска. Где-то в onDrawFrame()
function onGetCasefile()
asyncHttpRequest('GET', "ссыль", nil, -- выполняется асинхрон
function(response)
--ну, тут код х
end,
function(err)
sampAddChatMessage('{6600FF}Нет связи')
end)
while true do
wait(5)
if settings.thread:status() == 'dead' then -- ждем, когда завершится асинхронный поток (аналог settings.thread.dead)
wait(1000)
break -- по завершению переходим к другим асинхронам
end
end
for i = 1, tonumber(casefile.get.count) do -- nick, name, old, frac, sex, status, short, invest, imgur
while true do
wait(5)
if settings.thread:status() == 'dead' then -- проверяем, завершился ли асинхронный запрос перед тем, который в цикле
wait(1000) -- на всякий ждем секунду
sampAddChatMessage('{6600ff}'..tostring(settings.thread.dead))
break
end
end
asyncHttpRequest('GET', "ссыль2", nil,
function(response)
--ну, тут код х2
end
end,
function(err)
sampAddChatMessage('{6600FF}Нет связи')
end)
end
end
function asyncHttpRequest(method, url, args, resolve, reject) -- взято у ковера.
local request_thread = effil.thread(function (method, url, args)
local requests = require 'requests'
local result, response = pcall(requests.request, method, url, args)
if result then
response.json, response.xml = nil, nil
return true, response
else
return false, response
end
end)(method, url, args)
if not resolve then resolve = function() end end
if not reject then reject = function() end end
settings.thread = lua_thread.create(function() -- Сюда я и поставил переменную, содержащую поток.
local runner = request_thread
while true do
local status, err = runner:status()
if not err then
if status == 'completed' then
local result, response = runner:get()
if result then
resolve(response)
else
reject(response)
end
return
elseif status == 'canceled' then
return reject(status)
end
else
return reject(err)
end
wait(0)
end
end)
end