À©µµ¿ì ÇÁ·Î±×·¡¹Ö ÀÚ·á

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   [MFC] ´ÜÀÏ Thread¿Í Timer 1998/07/29 (14:06)
À̸§ ±èÈ¿¿ø
¹øÈ£ 45
Á¶È¸ 377
º»¹® 1. Windows Message ó¸®

MSG msg;
while(::GetMessage(&msg,NULL,0,0)){
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}

TranslateMessage()´Â WM_KEYDOWNÀÌ ¹ß»ýÇϸé, ±× Å°°¡
ASCII ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ´Â Å°ÀÏ °æ¿ì WM_CHAR·Î º¯°æÇÑ´Ù.
DispatchMessage()´Â MFC Msssage Pump(¸Þ½ÃÁö ¸ÊÀ» °ÅÃÄ
ÇÔ¼ö È£Ãâ)¿¡ Á¦¾î±ÇÀ» Àü´ÞÇÑ´Ù.

2. Á¦¾î±Ç
Çڵ鷯 ÇÔ¼öÁßÀÇ Çϳª°¡ ¿À·£ ½Ã°£µ¿¾È CPU¸¦ Â÷ÁöÇÏ°í ÀÖ´Ù¸é,
Win32¿¡¼­´Â ¼±Á¡Çü ¸ÖƼŽºÅ· Áö¿øÀ¸·Î ´Ù¸¥ ¾îÇø®ÄÉÀ̼ÇÀÌ
ÀÛµ¿ÇÒ ¼ö ÀÖ´Ù.(À©µµ¿ìÁî´Â ÇÊ¿äÇÒ °æ¿ì CPU¸¦ Â÷ÁöÇÏ°í ÀÖ´Â
Çڵ鷯 ÇÔ¼ö¸¦ ÀÎÅÍ·´Æ®ÇÑ´Ù.) ±×·¯³ª Win32ÀÇ °æ¿ìµµ ÇØ´ç
ÇÁ·Î±×·¥ÀÇ Çڵ鷯 ÇÔ¼ö°¡ ¸®Å쵃 ¶§±îÁö DispatchMessage()
ÇÔ¼öµµ ¸®ÅϵÇÁö ¾ÊÀ¸¹Ç·Î ±× ½Ã°£µ¿¾È ÇÁ·Î±×·¥Àº ¸Þ½ÃÁö¸¦
ó¸®ÇÒ ¼ö ¾ø´Ù.
µû¶ó¼­, ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù.

GetMessage()´ë½Å,
PeekMessage(&msg,NULL,0,0,PM_REMOVE); ·Î ´ëü
PeekMessage()ÇÔ¼ö´Â ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¸Þ½ÃÁö°¡ ¾ø¾îµµ Áï½Ã
¸®ÅÏÇÑ´Ù´Â Á¡À» Á¦¿ÜÇÏ°í´Â GetMessage()¿Í À¯»çÇÏ°Ô ÀÛµ¿ÇÑ´Ù.
ÀÌ °æ¿ì °è¼ÓÇؼ­ CPU¸¦ Àâ°í ÀÖ´Â Çڵ鷯°¡ ÇÊ¿äÇÒ °æ¿ì¿¡ ÁßÁöµÇ°í
ó¸®ÇÒ ¸Þ½ÃÁö¿¡ ´ëÀÀÇÏ´Â Çڵ鷯°¡ È£ÃâµÈ ´ÙÀ½¿¡ ±× Çڵ鷯°¡ Á¾·á
µÇ¸é ´Ù½Ã ¿ø·¡ÀÇ Çڵ鷯°¡ ½ÃÀ۵ȴÙ.

3. Timer
CWndÀÇ member functionÀÎ SetTimer()¸¦ È£ÃâÇϸé
Á¤ÇØÁø ½Ã°£°£°Ý¸¶´Ù WM_TIMER ¸Þ½ÃÁö°¡ »ý¼ºµÈ´Ù.
(´ÜÀ§´Â 1/1000ÃÊÀ̸ç, ID(Á¤¼ö)·Î ¿©·¯°³ÀÇ Å¸À̸Ӹ¦ ±¸º°ÇÔ)
±×·¯³ª, À©µµ¿ì´Â ½Ç½Ã°£ ¿î¿µÃ¼Á¦°¡ ¾Æ´Ï¹Ç·Î 100¹Ð¸®ÃÊ ÀÌÇÏ·Î
¼³Á¤ÇÒ °æ¿ì¿¡´Â Á¤È®¼ºÀÌ ¶³¾îÁø´Ù.

4. Example

Dialog³»¿¡¼­
OnStart() // Start¹öÆ°¿¡ ´ëÇÑ Çڵ鷯 ÇÔ¼ö
m_nTimer=SetTimer(1,100,NULL);
GetDlgItem(IDC_START)->EnableWindow(FALSE);
// Button Disabled
volatile int nTemp;

for(m_nCount=0;m_nCount<nMaxCount;m_nCount++){
for(nTemp=0;nTemp<10000;nTemp++);
if(::PeekMessage(&message,NULL,0,0,PM_REMOVE)){
 ::TranslateMessage(&message);
 ::DispatchMessage(&message);
 }
}
CDialog::OnOK();
// Dialog Á¾·á


void CComputeDlg::OnTimer(UINT nIDEvent)
{
CProgressCtrl* pBar=
(CProgressCtrl*)GetDlgItem(IDC_PROGRESS);
pBar->SetPos(m_nCount*100/nMaxCount);
}
// m_nCount°ª¿¡ µû¶ó Progress Control °»½Å


5. OnIdle()
Application Framwork´Â CWinApp Ŭ·¡½ºÀÇ °¡»ó ÇÔ¼ö
OnIdle()¸¦ È£ÃâÇϴµ¥, ÀÌ ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵å ÇÏ¿©
background¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù. OnIdle()ÇÔ¼ö´Â ¸Þ½ÃÁö
Å¥°¡ ºñ¿öÁú ¶§¸¶´Ù È£ÃâµÈ´Ù. (¿¬¼ÓÀûÀ¸·Î È£ÃâµÇÁö´Â
¾Ê´Â´Ù.)
±âÃÊ Å¬·¡½º¿¡¼­ OnIdle()ÇÔ¼ö´Â Åø¹Ù ¹öÆ°°ú, »óÅ ǥ½ÃÀÚ¸¦
°»½ÅÇÏ¸ç ¿©·¯°¡Áö Àӽà °´Ã¼ Æ÷ÀÎÅ͸¦ Á¦°ÅÇÑ´Ù.
OnIdle()³»¿¡¼­ ÀÎÅÍÆäÀ̽º¸¦ °»½ÅÇÏ´Â °Íµµ ÁÁÀº ¹æ¹ýÀÌ´Ù.
¸Þ½ÃÁö°¡ ¾øÀ¸¸é Äڵ尡 ¼öÇàµÇÁö ¾ÊÁö¸¸, À̶§ »ç¿ëÀÚ
ÀÎÅÍÆäÀ̽ºµµ º¯°æµÇÁö ¾Ê±â ¶§¹®¿¡ ¹®Á¦°¡ ¾ø´Ù.

CWndApp::OnIdle()À» ¿À¹ö¶óÀ̵å ÇÒ ‹š´Â ±âÃÊ Å¬·¡½ºÀÇ
OnIdle()À» È£ÃâÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é Åø¹Ù ¹öÆ°ÀÌ
°»½ÅµÇÁö ¾Ê°í, Àӽà °´Ã¼µµ Á¦°ÅµÇÁö ¾Ê´Â´Ù.

»ç¿ëÀÚ°¡ ¸ð´Þ ´ÙÀ̾ó·Î±× ¹Ú½º¸¦ »ç¿ëÇϰųª ¸Þ´º¸¦ »ç¿ëÇÏ°í
ÀÖÀ» ¶§´Â OnIdle()ÀÌ È£ÃâµÇÁö ¾Ê´Â´Ù.

OnIdle()Àº ¸Þ½ÃÁö Å¥°¡ »ç¿ëÁßÀÎ »óÅ¿¡¼­ ºñ¿öÁú ¶§¸¶´Ù
¼öÇàµÇ¹Ç·Î, ¸¸¾à »ç¿ëÀÚ°¡ ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â
»óÅ¿¡¼­´Â ¾î¶² ¸Þ½ÃÁöµµ ¹ß»ýÇÏÁö ¾ÊÀ¸¹Ç·Î OnIdle()󸮰¡
¼öÇàµÇÁö ¾Ê´Â´Ù.

HomePage Backward Forward Post Reply List
1998 by swindler