Перейти к содержимому
  • 0
mighty

Задержка с минимальной нагрузкой на CPU

Вопрос

Привет, подскажите пожалуйста как можно сделать задержку. То есть если условие верно, то ожидание 2 секунды затем выполнятся действие. Задержка не должна быть sleep. Задержка должна минимально нагружать CPU.

 

Вот код:

FINDSTRARP1 = ' 13,59'
FINDSTRARP2 = ' 13,56'
FINDSTRARP3 = ' 4001,09'
FINDSTRARP4 = 'Вы достигли места назначения!'
FINDSTRARP5 = 'Список анимаций загружен'


function onPrintLog(msg)
    if getServerName() ~= nil then
        if string.match(getServerName(), 'Advance RolePlay') then
            if string.match(msg, FINDSTRARP1) then
тут должна быть задержка 3 секунды
                printLog('убиваем бота')
                runCommand('!sethp 0')
            elseif string.match(msg, FINDSTRARP2) then
тут должна быть задержка 3 секунды
                printLog('убиваем бота')
                runCommand('!sethp 0')           
            elseif string.match(msg, FINDSTRARP3) then
тут должна быть задержка 3 секунды
                printLog('Телепортбота на места сна')
                runCommand('!coord 1158,32 -1360,54 4001,10')
            elseif string.match(msg, FINDSTRARP4) then
                printLog('Anim34')
                runCommand('/anim 34')
            elseif string.match(msg, FINDSTRARP5) then
тут должна быть задержка 3 секунды
                printLog('Anim34')
                runCommand('/anim 34')
               
               
           
            end
        end
    end
end

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

os.sleep(seconds)

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

computer = require("computer")

computer.pullSignal(1) - задержка на секунду, если не будет ивентов.

Но чем тебя слип не устроил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
local function sleep(timeout)
  local deadline = computer.uptime() + (timeout or 0)
  while computer.uptime() < deadline do
    computer.pullSignal(deadline - computer.uptime())
  end
end

Держи простейший вариант задержки, учитывающий возможные ивенты, если дефолтный os.sleep юзать не можешь/не хочешь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если я правильно понял, этот код запускается вообще в каком-то другом окружении, то есть не в OC/CC. Тогда надо искать, что написано в доках для такого окружения. В обычном луа, если что, слипов нет, кроме busy wait.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если я правильно понял, этот код запускается вообще в каком-то другом окружении, то есть не в OC/CC. Тогда надо искать, что написано в доках для такого окружения. В обычном луа, если что, слипов нет, кроме busy wait.

Похоже.

 

_VfUZug_TRGgAbnPjv0dSw.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Запускается этот скрипт с помощью РакБота, в документации про wait ничего нет. Вот решил у вас спросить, может вы знаете как сделать задержку. 

Изменено пользователем mighty

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Запускается этот скрипт с помощью РакБота, в документации про wait ничего нет. Вот решил у вас спросить, может вы знаете как сделать задержку.

Вызвать внешнюю команду:

 

 -- win7 (может быть и выше)
os.execute("timeout " .. tonumber(n)) 
--windows WScript
function sleep(n)
  local vb = "test.vbs"
  local f = assert(io.open(vb,"w"))
  f:write("WScript.Sleep(" .. (tonumber(n) * 1000) .. ")\n")
  f:close()
  os.execute(vb)
end
-- Cygwin/MinGW/Windows Server Resource Kit/Linux
function sleep(n)
  os.execute("sleep " .. tonumber(n))
end
Взял отсюда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет, подскажите пожалуйста как можно сделать задержку. То есть если условие верно, то ожидание 2 секунды затем выполнятся действие. Задержка не должна быть sleep. Задержка должна минимально нагружать CPU.

ок. Не sleep? ихихихихихи. Ну тогда будет называтся wait:

function wait(interval)
  local deadline = os.clock()+interval
  repeat
  until os.clock()>=deadline
end
Изменено пользователем eu_tomat
длинноцитата

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это и называется busy wait. Грузить на 100% процессор вместо нормальной задержки.

Изменено пользователем Fingercomp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...