À©µµ¿ì ÇÁ·Î±×·¡¹Ö ÀÚ·á |
---|
Á¦¸ñ | [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()󸮰¡ ¼öÇàµÇÁö ¾Ê´Â´Ù. |