Как интервал времени между событиями в Луа

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

0
задан Jack Vu 18 January 2019 в 18:21
поделиться

1 ответ

Вы можете использовать os.clock, который возвращает время выполнения ваших программ с момента запуска в секундах.

Возвращает приблизительное значение в секундах процессорного времени, используемого программой. Источник

Эту функцию можно использовать таким образом.

local t1 = os.clock() -- begin
local t2 = os.clock() -- end
local dt = t2 - t1    -- calulate delta time

-- or looped

local t1 = os.clock() -- begin
while true do
    local t2 = os.clock() -- end
    local dt = t2 - t1    -- calulate delta time
    t1 = t2               -- reset t1

    -- use dt ...
end

-- or wait for time elapsed
-- runs until 1 second passed    

local t1 = os.clock()
while (os.clock() - t1) < 1 do
    -- do stuff while dt is smaller than 1

    -- could even reset timer (t1) to current to 
    -- repeat waiting
    -- t1 = os.clock() | ...
end

-- logic for your example

function counter()
    local time = os.clock()
    local lastLedOn = false
    local counter = 0

    while true do
        if os.clock() - time > 1.0 then
            break
        end

        if getLedValue() == on then -- replace
            time = os.clock()

            if not lastLedOn then
                lastLedOn = true
                counter = counter + 1

                -- print(counter) | or here if you want to print repeatedly
            end
        end
    end

    print(counter)
end -- was unable to test it
0
ответ дан Phins 18 January 2019 в 18:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: