1. MultiMedia Timer ¶
λ©ν°λ―Έλμ΄ νμ΄λ¨Έμ λν μ€λͺ
μ μ κ² λμμ΅λλ€.
μ λ ZP 01 μ΄μ νΈ μ λλ€.
μ λ ZP 01 κ°μΈμ μ λλ€.
μ λ ZP 01 μ΄μ νΈ μ λλ€.
μ λ ZP 01 κ°μΈμ μ λλ€.
2. κΈ°λ³Έ κ°λ ¶
- OnTimerμ SetTimerμ μ‘°ν©μΌλ‘ ꡬνλλ κ°μ₯ μΌλ°μ μΈ νμ΄λ¨Έλ μ ννμ§ μμ΅λλ€.
μ΄κ² λ©μμ§ λ°©μμΌλ‘ ꡬλλκΈ° λλ¬Έμ λ©μμ§ νμ λ€λ₯Έ λ©μμ§κ° μμ΄λ©΄ κ·Έ λ§νΌ
μ‘°κΈμ© λ¦μ΄μ§κ² λλ€κ³ ν©λλ€. μ€μ λ‘λ κ³΅μ΄ μμ§μ΄λ λμμ λ§λκΈ°λ₯Ό λ§ μμ§μ΄
λ©΄ κ³΅μ΄ λ―ΈμΈνκ² λλ €μ§λ κ²μ λ³Ό μ μμ΅λλ€.(λλ§ κ·Έλ°κ°?--;)
- μ΄κ²μ ν΄κ²°νκΈ° μν΄ MultiMedia Timerλ₯Ό μ°κ² λ©λλ€. Devpiaμμ λ³Έ λ°μ μνλ©΄
MultiMedia Timerλ μ체μ μΌλ‘ μ€λ λλ₯Ό λ§λ λ€λ€μ. κ·Έλμ λ©μμ§κ° μμ΄λ λ§λ
μκΈ° νΌμ ν μ§μ λ€ νλλ€μ.
2.1. κΈ°λ³Έ μ¬μ©λ² ¶
λ©ν°λ―Έλμ΄ νμ΄λ¨Έμ κ΄λ ¨λ ν¨μλ μ¬λ¬κ°μ§μ΄λ, νμ΄λ¨Έλ₯Ό ꡬννλλ° νμν ν¨μλ μΈκ°μ
λλ€.
! κ·Έλ¬λ κ·Έμ μ μΆκ°μμΌμ€μΌν κ² μμ΅λλ€.
첫째λ WINMM.LIBλ₯Ό μΆκ°μμΌμ€μΌ νκ³
λμ§Έλ MMSYSTEM.H λ₯Ό μΈν΄λ£¨λ μμΌμ€μΌ ν©λλ€.
! κ·Έλ¬λ κ·Έμ μ μΆκ°μμΌμ€μΌν κ² μμ΅λλ€.
첫째λ WINMM.LIBλ₯Ό μΆκ°μμΌμ€μΌ νκ³
λμ§Έλ MMSYSTEM.H λ₯Ό μΈν΄λ£¨λ μμΌμ€μΌ ν©λλ€.
- μΆκ°νλλ² :
μμ€μ #include <mmsystem.h> λ₯Ό λ£κ³
Project(P) - Setting(S, ALT+F7)μ λλ¬ Linkνμ Object/Library modules:λμ winmm.libλ₯Ό μ μ΄μ€λλ€.
2.1.1. timeSetEvent ¶
νμ΄λ¨Έλ₯Ό λ°λμν€λ ν¨μμ
λλ€.
~cpp MMRESULT timeSetEvent(UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent);
- MMRESULTμλ νμ΄λ¨Έμ λ²νΈκ° 리ν΄λ©λλ€. NULLμΌ κ²½μ°μλ μ€ν¨ν κ²½μ°μ
λλ€.
- uDelay : νμ΄λ¨Έκ° νΈμΆλ κ°κ²©μ λ£μ΅λλ€. λ¨μλ msμ
λλ€.
- uResolution : λκ° 0μ λ£μ΅λλ€λ§... μ νλ κ°λ€κ³ ν©λλ€.
- lpTimeProc : CALLBACKν¨μμ μ΄λ¦μ λ£μ΅λλ€.
- dwUser : CALLBACKν¨μμ μ λ¬ν μΈμλ₯Ό λ£μ΅λλ€.
- fuEvent : νμ΄λ¨Έκ° νΈμΆλλ λ°©λ²μ λ£μ΅λλ€.
- TIME_ONESHOT : CALLBACKν¨μκ° λ± νλ²λ§ μ€νλ©λλ€.
- TIME_PERIODIC : uDelayμκ°μ΄ μ§λ λλ§λ€ CALLBACKν¨μκ° μ€νλ©λλ€.
- TIME_ONESHOT : CALLBACKν¨μκ° λ± νλ²λ§ μ€νλ©λλ€.
2.1.2. TimeProc ¶
νμ΄λ¨Έλ‘ λΆλ¬λ΄μ΄ μ§μ μ€νλλ ν¨μλΆλΆμ
λλ€
~cpp void CALLBACK TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
- uID : νμ΄λ¨Έμ λ²νΈκ° λμ΄μ΅λλ€
- dwUser : timeSetEvent ν¨μμ dwUserκ°μ΄ λμ΄μ΅λλ€.
- λλ¨Έμ§ λ λ³μλ μ°μ§ μμ΅λλ€.
- μ΄κ²μ μ½λ°± ν¨μλΌμ μ μ λ³μλ‘ ν΄μΌλλ€λ€μ. κ΅³μ΄ ν΄λμ€ μμ λ£κ³ μΆλ€λ©΄ staticμΌλ‘ μ μΈν΄μΌ ν©λλ€.
2.1.3. timeKillEvent ¶
μ¬μ©μ΄ λλ νμ΄λ¨Έλ₯Ό μ£½μ΄λ λΆλΆμ
λλ€.
~cpp MMRESULT timeKillEvent(UINT uTimerID);
- uTimerID μλ νμ΄λ¨Έμ λ²νΈλ₯Ό λ£μ΅λλ€.
2.2. μμ ¶
CALLBACK ν¨μλ₯Ό μ μμΌλ‘ μ μΈν κ²½μ°
~cpp m_TimerID=timeSetEvent(20,1,&TimerProc,(DWORD)this,TIME_PERIODIC);
- νμ΄λ¨Έλ₯Ό μμνλ λΆλΆμ
λλ€.
- m_TimerIDλ UINTν μ
λλ€.
~cpp void CALLBACK TimerProc(UINT uiID,UINT uiMsg,DWORD dwUser,DWORD dw1,DWORD dw2) { CAlcaDlg *pDlg=(CAlcaDlg*)AfxGetMainWnd(); pDlg->SendMessage(WM_MYMSG,0,0); }
- μ½λ°± ν¨μλ₯Ό μ μνκ²μ
λλ€. μ½λ°± ν¨μλ΄μμλ 볡μ‘ν μΌμ νμ§ μλκ² μ μ 건κ°μ μ’λ€κ³ ν©λλ€.
κ·Έλμ λ©μμ§λ‘ λ λ € λ΄€μ΅λλ€. κ·Έλ°λ° μ λ³λ£¨ μ°¨μ΄μ μ λͺ»λλΌκ² λκ΅°μ..--;
κ³ μΉ κ² μμΌλ©΄ κ³ μ³ μ£ΌμκΈΈ...
~cpp CAlcaDlg *pDlg = (CAlcaDlg*)AfxGetMainWnd(); // λ©μΈ μλμ°μ ν¬μΈν°λ₯Ό μ»μ΄μμ timeKillEvent(pDlg->m_TimerID); // νμ΄λ¨Έ μ’ λ£
CALLBACK ν¨μλ₯Ό ν΄λμ€ ν¨μλ‘ μ μΈν κ²½μ°
ν΄λμ€ μ μΈμ timeprocν¨μλ static μΌλ‘ μ μΈν΄μΌ ν©λλ€.
ν΄λμ€ μ μΈμ timeprocν¨μλ static μΌλ‘ μ μΈν΄μΌ ν©λλ€.
- CALLBACK ν¨μλ ν΄λμ€ λ΄μμ μ μΈ λ κ²½μ°μλ staticμΌλ‘ μ μΈ λμ΄μΌν©λλ€.
~cpp m_nTimerID = timeSetEvent(5, 0, (LPTIMECALLBACK)timeproc, (DWORD)this, TIME_PERIODIC);
- m_nTimerIDλ UINTν μ
λλ€. μ±κ³΅ν κ²½μ°μλ νμ΄λ¨Έμ λ²νΈκ° λμ΄μ΅λλ€.
- 5λ νμ΄λ¨Έκ° νΈμΆλ κ°κ²©μ
λλ€. μμ λ¨μλ ms(1/1000μ΄)μ
λλ€.
- thisλ μ΄ ν΄λμ€ μΈμ€ν΄μ€μ κ°μ λ겨μ€λλ€. ν΄λμ€ λ΄λΆ ν¨μλ‘ μ μΈνμ κ²½μ°λ€λ μ€μν μΈμκ°μ
λλ€.
~cpp void CALLBACK CMyDlg::timeproc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2){ CMyDlg *pDlg = (CMyDlg *)dwUser; pDlg->......
dwUserλ timeSetEventμ thisκ°μ μΈμλ‘ λ°μ pDlgμ νμ¬ μΈμ€ν΄μ€μ μ£Όμλ₯Ό λ£μ΅λλ€.
pDlgλ₯Ό ν΅ν΄μ μλ ν΄λμ€μ λͺ¨λ λ©μλμ λ³μλ₯Ό μ¬μ©ν μ μμ΅λλ€.
pDlgλ₯Ό ν΅ν΄μ μλ ν΄λμ€μ λͺ¨λ λ©μλμ λ³μλ₯Ό μ¬μ©ν μ μμ΅λλ€.
~cpp timeKillEvnet(m_nTimerID);
setTimerEventλ μ»μ νμ΄λ¨Έμ λ²νΈλ₯Ό μ§μ΄λ£μ΄ νμ΄λ¨Έλ₯Ό μ£½μ
λλ€.
2.3. μ£Όμμ ¶
- CALLBACK ν¨μλ₯Ό μ¬μ©ν λμ μ£Όμμ . (in MSDN)
- Applications should not call any system-defined functions from inside a callback function, except for PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString.
- μ΄ν리μΌμ΄μ μ μ½λ°± ν¨μ λ΄λΆλ‘λΆν° λ€μ ν¨μλ₯Ό μ μΈνκ³ λ μμ€ν μ μ ν¨μλ₯Ό λΆλ₯Ό μκ° μλ€. : PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString.
μ λ§ν ν¨μλ€μ Callbackν¨μ λ΄μμ λΆλ₯΄λ©΄ μλ©λλ€.
- KBλ¬Έμ Q130866λ²μ μ°Έκ³ νμ΅λλ€.
CALLBACKν¨μ λ΄λΆμμ νλ©΄μ κ°±μ ν λμλ Invalidte()ν¨μλ user λ©μΈμ§λ₯Ό λ§λ€μ΄μ λ λ €μ£Όλ©΄ λ©λλ€.
~cpp void CALLBACK EXPORT CTmrprocView::TimerProc(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime) { CTmrprocView * pThis; if (m_thisList.Lookup(idTimer, (LPVOID &) pThis)) { ASSERT(pThis->GetSafeHwnd()); CDC* pDC = pThis->GetDC(); wsprintf((LPSTR) pThis->m_strOutput, "CTmrprocView::TimerProc() Called. Count = %ld", ++pThis->m_cCount); pThis->Invalidate(TRUE); } }