본문 바로가기
이미지맥스 그리고 루아(lua)/루아(lua)

[lua] 루아에서 sleep() 함수를 구현하기

by 위치결정 2021. 5. 10.
반응형

다른 언어에서 통상적으로 지원하는 시간지연딜레이 함수인 sleep() 을 루아에서는 직접 함수를 만들어 구현해야합니다.

 

os라이브러리의 프로그램 구동시간을 리턴해주는 os.clock() 함수를 이용하여 쉽게 구현할수 있습니다.

os.clock() 함수는 프로그램의 구동시간을 초단위로 실수값 형태로 반환을 해줍니다.

가령 프로그램이 동작한지 10초가 지났다면 10.000 으로 반환 값이 돌아옵니다.

이를 통해 sleep() 함수를 실행했을때의 클럭과 지정한 시간이 경과한 후 클럭의 차를 구하면 경과한 시간을 알수 있게되어 while 반복문을 이용하거나 until 반복문 이용하면 딜레이 동작을 구현할수 있습니다.

 

1. 시간지연을 초(sec) 단위로 설정하여 슬립 동작을 구현하는 경우

-- 초단위 Sleep 함수
function sleep(sec)
    local t = os.clock()
    while os.clock() - t <= sec do
    end
end

-- 인수 : 지연시간(초)

 

 

-- 예시1) 5초 딜레이 타이머 순차 동작 예시
print(os.clock())
print('Sleep Start')
sleep(5)
print(os.clock())
print('Sleep finish')

-- > 0.651
-- > Sleep Start
-- > 5.652
-- > Sleep Finish

 

2. 시간 지연을 밀리세크(ms) 단위로 설정하여 슬립 동작을 구현하고 싶은 경우

1초(sec)를 밀리초(ms)단위로 환산하면 1000이므로 os.clock()에 1000을 곱해주거나 반대로 인수를 1000으로 나눠주면  됩니다.

-- 초단위 Sleep 함수
function sleep_ms(ms)
    local t = os.clock()
    local ms = ms / 1000
    while os.clock() - t <= ms do
    end
end

-- 인수 : 지연시간(밀리초)

 

 

-- 예시2) 5초(5000ms) 딜레이 타이머 순차 동작
print(os.clock())
print('Sleep Start')
sleep_ms(5000)
print(os.clock())
print('Sleep finish')

-- > 0.426
-- > Sleep Start
-- > 5.427
-- > Sleep Finish

 

보다 여유를 가지는게 좋을것 같습니다.

 

참조 문헌 : lua-users.org/wiki/SleepFunction

반응형

댓글