Computer/C, CPP, MFC Updated: 2015. 6. 2. 15:04 hwaya.

timeSetEvent 와 친구들

반응형

이틀째, 프로그램에서 데이터를 보내주는걸 확인하는 부분이 있는데 

(사실 이부분도 몰랐다..내가 만든게 아니니ㅜㅜ)

계속 무한루프 걸렸는지 '응답없음' 으로

도도한 녀석 같으니 대꾸가~ 없어!!!!!!!!

흥4


이리보고 저리보고 이부분일꺼라고 예상은 되었다..


WaitForSingleObject


예상은 했지만, 

역시나... 이녀석과 같이 놀고 있는 녀석이 범인이였다.

timeSetEvent

이놈옴~!!!


재현이 1시간이상 걸리니.. ㅜㅜ

지루해~


WaitForSingleObject 에서 받아야되는데 받지를 못하니..

 참고: WaitForSingleObject


자! 그럼 timeSetEvent에 대해서 알아보자.

멀티미디어 타이머로 아주아주 높은 정확도의 타이머이다.

일정한 주기마다 표시된 콜백 함수나 이벤트를 호출 한다.


함수 원형은

WINMMAPI MMRESULT WINAPI timeSetEvent( __in UINT uDelay, __in UINT uResolution,

    __in LPTIMECALLBACK fptc, __in DWORD_PTR dwUser, __in UINT fuEvent);


매개변수는,


첫번째, uDelay

밀리초(MilliSecond, 1/1000 초) 단위의 딜레이시간

이벤트 발생 주기를 명시합니다. 

만약 발생 주기가 타이머에서 제공가능한 범위가 아닐 경우 에러를 발생.

 

두번째, uResolution

밀리초 단위의 타이머 해상도

해상도가 0 이면 주기 가능한 최고로 정확하게 발생해야함

그러나 해상도에 0 을 설정하면 시스템에 부하를 주기때문에 적절하게 사용하여 부하를 줄이도록 하는 것이 좋다.

 


        타이머 해상도의 최소값과 최대값은 timeGetDevCaps() 함수로 얻을 수 있다.

 

TIMECAPS timecaps;    // 구조체 선언

timeGetDevCaps(&timecaps, sizeof(TIMECAPS));


timecaps.wPeriodMin    // 최소

timecaps.wPeriodMax    // 최대

 

세번째, lpTimeProc

호출할 콜백 함수의 포인터를 명시,

만약 fuEvent 가 TIME_CALLBACK_EVENT_SET 이나 TIME_CALLBACK_EVENT_PULSE 플래그로 명시되어 있다면, 이 매개변수는 이벤트 핸들로 판단하여 SetEvent() 나 PulseEvent() 함수를 호출하여 이벤트를 발생 시킵니다.

 

        콜백 함수의 원형은 아래와 같으며 아래에 주기마다 실행할 루틴을 적어주면 됩니다.

 

        // 일정 주기가 되는 시점마다 호출될 콜백 함수

        // m_nTimerID : timeSetEvent 함수의 반환값으로 부여받은 타이머의 ID

        // uMsg, dw1, dw2 : 내부적으로 예약된 것이므로 사용하지 않는다.

        // dwUser : timeSetEvent 함수를 호출할 때 dwUser 매개 변수에 입력한 사용자 데이터이다.

        void CALLBACK TimerProc(UINT m_nTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)

        {

            // 원하는 작업을 명시한다.

        }

 

네번째, dwUser

콜백 함수의 매개변수로 사용될 데이터.

현재 윈도우의 포인터를 설정하면 유용하게 사용할 수 있다.

 

다섯번째, fuEvent

타이머 이벤트의 타입을 명시

발생빈도중에 하나의 값과 lpTimeProc 중에 하나의 값을 조합하여 사용

발생빈도는 TIMER_ONESHOT 가 기본 값이고,  lpTimeProc 는 TIME_CALLBACK_FUNCTION 가 기본 값

이므로 기본 값이 아닌 값을 설정할 경우 반드시 명시적으로 설정해주어야 한다.

 

발생 빈도

            TIMER_ONESHOT 

               이벤트 발생 또는 콜백 함수 호출이 한번만 발생한다.


            TIME_PERIODIC    

               uDelay 주기로 타이머가 해제될 때까지 발생한다.

 

 

 lpTimeProc

            TIME_CALLBACK_FUNCTION 

                주기가 만료될 때 lpTimerProc 의 콜백함수를 호출합니다.

            TIME_CALLBACK_EVENT_SET

                주기가 만료될 때 SetEvent 함수를 호출하여 lpTimeProc 에 있는 이벤트 핸들을 발생시킵니다.

                이 값을 설정하므로써 이벤트가 발생되기 때문에 dwUser 매개 변수는 무시됩니다.

            TIME_CALLBACK_EVENT_PULSE

                주기가 만료될 때 PulseEvent 함수를 호출하여 lpTimerProc 에 있는 이벤트 핸들을 발생

                시킵니다. 이 값을 설정하므로써 이벤트가 발생되기 때문에 dwUser 매개 변수는 무시됩니다.


없애고 싶을때,


timeKillEvent (UINT uTimerID); 하면됩니다.


 

 

반응형

'Computer > C, CPP, MFC' 카테고리의 다른 글

ReadFile()  (0) 2015.12.04
SetFilePointer()  (0) 2015.12.04
프로그램 종료  (0) 2015.10.13
하위폴더까지 전체 복사하기  (0) 2015.10.02
윈도우 버전 알아보기  (0) 2015.10.02
Windows Styles  (0) 2015.06.15
PeekMessage  (0) 2014.03.26
Printf 함수에 대해서 알아보자  (0) 2011.07.13

Table of Contents


    EIGHTBOX
    EIGHTBOX
    hwaya.

    programmer

    🍋일상의 소소한 순간들부터 큰 꿈까지, 호기심을 만족시킬 다양한 카테고리를 담은 블로그 입니다. 그리고, 소소한 행동에 감동하며 기뻐하고 하루하루에 감사하는 사람🌵

    Today Yesterday Total
    최신글