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

[lua] 랜덤 시간 예약 설정 함수 setTime()

by 위치결정 2021. 7. 12.
반응형
-- 랜덤 시간 설정 (현재 시간 ~ 23시 59분 59초 중 랜덤한 시간 반환)
function setTime()
    math.randomseed(os.time() + math.random(0, 65535))
    local date = os.date('*t')
    local set_time = {hour = math.random(date.hour, 23), min = math.random(date.min, 59), sec = math.random(date.sec, 59)}
    print('set Time : [ '..set_time.hour..'h', set_time.min..'m', set_time.sec..'s ]')
    return set_time
end
-- > 리턴값 : {hour, min, sec} key를 가진 딕셔너리 형태의 테이블


-- 함수 실행
set_time = setTime()
--> set Time : [19h, 52m, 59s]
-- 랜덤한 설정된 시간을 변수에 저장하고 로그 출력합니다.

-- for 루프문을 이용한 테이블 key와 value값 확인
for key, value in pairs(set_time) do
    print(key, value)
end
--> hour 19
--> min 52
--> sec 59

어떠한 동작을 특정 시간을 지정하여 실행하고 싶은 경우가 있습니다.

가령 매 시간 10분이 되면 애플리케이션을 재실행 한다던지, 자정이 지나면 무엇인가를 하도록 만드는 것이죠.

 

사용자함수 setTime() 함수를 정의하여 사용하면 이러한 니즈를 해결할수있습니다.

랜덤한 값을 반환하는 math.random() 함수를 화용하여 시간을 랜덤한 값으로 설정합니다.

이때 현재 시간보다 과거의 시간으로 설정되면 안되기때문에 시스템의 현재 시간을 테이블형태로 반환하는 os.data('*t') 함수를 활용하여 반환받은 현재 시간, 분, 초 를 설정할 시간과 비교하여 활용하는 방법입니다.

 

그리고 설정된 시간과 현재 시간을 비교하여 일치하거나 경과하였다면 원하는 동작을 하도록 응용하면 됩니다.

 

-- 샘플 코드

local date = os.date('*t')

-- 설정된 시간이 없으면(null) 시간을 설정하고, 매 시간마다 예약 시간을 재설정
if (set_time == nil) or (date.min == 0 and date.sec == 0) then
    print('>> 시간을 설정합니다.')
    set_time = setTime()
end

-- 설정한 시간이 일치하면 동작 지령 On (매시간 동작하기 위해 분과 초만 비교)
isSet = (set_time.min == date.min) and (set_time.sec == date.sec)
if isSet then
    print('>> 동작을 실행합니다.')
    -- << 동작 코드 >>
    print('>> 동작을 완료하였습니다.')
    isSet = false
end

 

※ 이미지맥스의 경우 1초마다 루프가 돌아가는 프로그램 특성상 (기본값) 초단위로 비교시 1초이상 프로그램 처리가 걸릴시 누락이 발생하는 경우가 있으니 이러한 경우에는 경과시 동작하도록 코드를 수정하고 시간을 재설정 하도록 꾸미시면 될듯합니다. 대부분은 1초내로 프로그램이 처리가 되므로 큰 무리는 없을것으로 판단됩니다.

큰 이미지와 큰 영역의 roi를 처리해야하는 경우가 많을시 이러한 케이스가 자주 발생하므로 인지하고 계셔야합니다.

 

 

 

시간을 잘 지키면 모두가 편안 합니다.

반응형

댓글