TIMER EVENT에서의 이벤트 순서

최근 포스팅에서 WIDGET에서 사용할 수 있는 TIMER EVENT를 소개했는데요. 이번 시간에는 이벤트가 일어나는 순서에 대해서 이야기 해보려고 합니다.

다음 코드는 지난 시간에 사용했던 코드 중에서 다음과 같이 시간을 설정해주는 부분과, 이벤트가 실행되는 부분입니다.

 WIDGET_CONTROL, event.TOP, TIMER=stash.slt_time 이라는 부분은, auto_5s라는 프로시저에서 설정된 slt_time에 맞추어 XMANAGER에 의해서 다음 ‘slt_time’초 후에 반복적으로 이벤트를 실행하게 됩니다.

주의할 점은 이 코드가 어디에 삽입되느냐에 따라서 작업에 있어서 중요한, 시간적 정확도에서문제가 생길 수 있다는 점입니다. 현재 사용한 코드에서 WIDGET_CONTROL, event.TOP, TIMER=stash.slt_time 부분은 print, mod_now_time  보다 아래에 위치하고 있는데, IDL은 이 프로그램을 실행할 때 순차적으로 읽어 내려가게 됩니다. 즉, 짧은 시간 내에 실행되는 print 프로시저 대신에, 긴 시간 동안 실행되는 코드가 삽입되어 있을 때는 그만큼 반복되는 시간이 늦춰지게 됩니다.  예를 들어보겠습니다.

위 코드는 print 프로시저를 실행하기 전에 4초동안 멈추게 됩니다. 그 이후에 TIMER EVENT를 만나게 되고, slt_time으로 설정된 5초후에 다시 이벤트를 발생하게 됩니다. 그러므로 다음과 같이 9초간격으로 print된 결과가 나타나게 됩니다.

만약에, 5분에 한번씩 작동되어야 하는 프로그램에서 TIMER EVENT코드가 이와 같이 아래에 위치하게 된다면, 시간적으로 정확도가 낮아지게 됩니다.

그래서 위와 같이 코드를 수정하게 된다면, 원하는 시간간격과 그 사이에 실행되는 작업간의 갭을 줄일 수 있게 됩니다.

 

추가적으로 실행하는데 필요한 시간(wait문)과 반복되는 시간의 차이(slt_time)에 대한 비교를 해보면 다음과 같습니다.

 실행하는데 필요한 시간 : 4, 반복되는 시간 : 5

이 코드는 실행하는데 필요한 시간이 반복되는 시간보다 더 짧으므로, 원하는 시간간격으로 정확하게 실행됩니다. 그래서 다음과 같이 print됩니다.

이 결과와 같이 설정한 반복되는 시간 내에서 데이터를 처리하는 프로그램은 문제가 크게 생기지 않습니다만, 다음과 같이 실행하는데 필요한 시간이 반복되는 시간보다 오래 걸리는 경우에는 또 다른 문제가 생기게 됩니다.

 실행하는데 필요한 시간 : 11, 반복되는 시간 : 5

이 코드는 실행하는데 필요한 시간이 반복되는 시간보다 더 오래 걸리게 되고, 다음과 같이 print됩니다.

이 결과와 같이 코드를 실행하는데 필요한 시간이 반복되는 시간보다 긴 경우에는 실행을 하고 있는 도중에, 계속 해서 XMANAGER에서 반복을 주게 되고, 11초간격으로 프로그램이 실행되게 됩니다.

이처럼 원하는 시간 내에서 반복되는 프로그램을 제작할 때는 그 원하는 시간보다 프로그램을 실행하는데 걸리는 시간이 길게 되면 프로그램을 실행하는 시간에서 오차가 생기게 되는 것을 확인할 수 있습니다. 프로그램을 제작할 때 이러한 점을 참고하여 반복되는 시간보다 프로그램이 실행되는 시간이 빠르도록 제작한다면 더 정밀하고 완성된 프로그램을 만들 수 있을 것이라고 생각합니다.