Модифицированный sleep()
![]()
-- Исполняет задержку в all миллисекунд, проверяя каждые quant миллисекунд значение функции func
-- Если результат func() ~= nil / false, задержка прерывается
-- Если выход был по func(), возвращает ее результат, если истекло время ожидания - nil
function quik.sleep(all,quant,func) for _ = quant,all,quant do
local result = func()
if result then
return result
end
sleep(quant)
end
end
Пример использования. Ожидание исполнения отправленной на сервер транзакции. Колбек OnTransReply все входящие ответы сервера складывает в массив (таблицу) ontransreply_table. Мы ждем максимум 30 секунд и проверяем каждые 50 миллисекунд появление в таблице ontransreply_table ответа на транзакцию с нужным нам trans_id. В результате в переменной reply будет нужный нам ответ торговой системы на транзакцию или nil, если не дождались.
-- Поиск в таблице lua
-- TBL - таблица для поиска
-- FUNC - функция сравнения с одним параметром, в который передается значение элемента таблицы. Должна возвращать true в случае совпадения
-- Возвращает ключ и значение первого найденного результата (или nil/nil при неудаче)
function table.find(tbl,func)
for key,value in pairs(tbl) do
if func(value) then
return key,value
end
end
end
local _,reply
quik.sleep(30000,
50,
function()
_,reply = table.find(ontransreply_table,
function (t)
return t.trans_id == tonumber(trans_id)
end)
return reply
end)
