- 259
- 89
- Версия MoonLoader
- .027.0-preview
Привет, как можно исправить/изменить этот код чтобы он не стопил игру?
Или в луа невозможно созать полностью независимые потоки?
Может быть можно создать как-то мультипроцессинг?
lua_thread также стопит игру, хоть и ответ от сервера у меня занимает максимум 5мс, оно ощутимо подторможивает игру в эти моменты.
P.S. Также попробовал реализовать на effil, никакого эффекта не дало. Я что-то не так делаю?
Или в луа невозможно созать полностью независимые потоки?
Может быть можно создать как-то мультипроцессинг?
lua_thread также стопит игру, хоть и ответ от сервера у меня занимает максимум 5мс, оно ощутимо подторможивает игру в эти моменты.
Lua:
local copas = require 'copas'
function send_command(route, command, server_host, server_port, callback)
if not copas.running then
copas.running = true
lua_thread.create(function()
wait(0)
if not pcall(thread_manage_tool) then
print('Copas err')
end
end)
end
copas.addthread(function()
local udp = socket.udp()
udp:setpeername(server_host, server_port)
udp:send(route..";;;"..command)
udp:settimeout(1)
local response, err = udp:receive()
udp:close()
callback(response, err)
end)
end
function thread_manage_tool()
while not copas.finished() do
local ok, err = copas.step(0)
if ok == nil then error(err) end
wait(0)
end
copas.running = false
end
P.S. Также попробовал реализовать на effil, никакого эффекта не дало. Я что-то не так делаю?
Lua:
function send_command(route, command, server_host, server_port, callback)
local request_thread = effil.thread(function (route, command, server_host, server_port)
local udp = socket.udp()
udp:setpeername(server_host, server_port)
udp:send(route..";;;"..command)
udp:settimeout(1)
local response, err = udp:receive()
return true, response
end)(route, command, server_host, server_port)
-- If the query without response and error handling functions.
if not callback then callback = function() end end
-- Checking the execution of a 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)
end
return
end
end
wait(0)
end
end)
end
Последнее редактирование: