Lua не обеспечивает функцию сна. Есть несколько способов реализовать один as discussed on the Lua wiki, определенно взгляните. Решение на основе сокетов - лучший вариант, чем таймер, потому что он не вращает процессор (он занят), но для этого требуется установка третьей библиотеки sockets
. Во всех решениях ваше приложение ничего не может сделать, оно застревает в ожидании времени.
Вы должны спросить, действительно ли вам нужно заблокировать поток в течение заданного времени, то есть, почему бы не использовать цикл while до тех пор, пока не будет выполнено определенное условие. В вашем случае это может быть цикл до тех пор, пока не будет получен статус OK из запроса или не истечет определенное количество времени. Таким образом, цикл завершится, как только будет достигнуто условие «идти вперед», но функция вернется, если для достижения этого состояния потребуется слишком много времени. Другим преимуществом этого является то, что вы можете дать TS-приложению возможность обрабатывать другие события, каждый раз через цикл.
Это будет выглядеть следующим образом (не проверено):
function masspoke(serverConnectionHandlerID, clientID, txt)
local start = os.clock() -- start timing
local MAX_WAIT_SECS = 1 -- seconds to wait for OK
local error = ts3.requestClientPoke(serverConnectionHandlerID, clientID, txt)
while error ~= ts3errors.ERROR_ok do
if os.clock() - start > MAX_WAIT_SECS then -- too long, give up!
if error == ts3errors.ERROR_not_connected then
ts3.printMessage(serverConnectionHandlerID, "Error: Not Connected")
else
print("Getting Error: " .. error .. "by poking the ID: " .. clientID)
end
return
end
error = ts3.requestClientPoke(serverConnectionHandlerID, clientID, txt)
end
-- now that ts poke is ok, do whatever:
ts3.requestClientPoke(serverConnectionHandlerID, clientID, txt)
end
Я думаю, что выше является экологически чистым подходом, целью является более ясным. Если вы действительно хотите спать основной поток через модуль сокета, а затем поставить это перед вашей masspoke()
функции:
require "socket" -- you need to install socket lib manually
function sleep(sec)
socket.select(nil, nil, sec)
end
Но есть несколько других вариантов на http://lua-users.org/wiki/SleepFunction, которые должны быть стоит попробовать (в зависимости от платформы, и будет ли вы хотите, чтобы ваша программа запускалась на нескольких платформах или нет), которые не требуют установки сторонней библиотеки. Обязательно внимательно прочитайте эту страницу и проверьте, что она показывает.
Сообщение об ошибке ясно: вы вызываете неопределенную глобальную функцию с именем 'sleep'. – lhf
ok, так как я могу добавить паузу, где я хочу, чтобы она спала. –
Вы находите функцию сна в некоторой библиотеке, которая предоставляет одну или связывает одну из C самостоятельно. –