À©µµ¿ì ÇÁ·Î±×·¡¹Ö ÀÚ·á |
---|
Á¦¸ñ | [MFC] Thread µ¿±âÈ 1998/07/29 (17:28) |
À̸§ | swindler |
¹øÈ£ | 50 |
Á¶È¸ | 440 |
º»¹® |
Event¸¦ ÀÌ¿ëÇÑ ½º·¹µå µ¿±âÈ Àü¿ª º¯¼ö´Â ½º·¹µå °£ÀÇ Åë½ÅÀ» À§ÇØ È¿À²ÀûÀÎ ¼ö´ÜÀÌ µÇÁö¸¸, Á» ´õ Á¤±³ÇÑ ±â¼úÀ» ½ÃµµÇϱâ À§Çؼ´Â ½º·¹µå°£ Åë½Åº¸´Ù´Â ½º·¹µå µ¿±âÈÀÇ °üÁ¡¿¡¼ ½º·¹µåµé ¼·Î°£ÀÇ »óÈ£ÀÛ¿ëÀ» µ¿±âÈÇÒ ¼ö ÀÖ´Ù. À̺¥Æ®´Â À©µµ¿ìÁî°¡ ½º·¹µå µ¿±âȸ¦ À§ÇØ Á¦°øÇØ ÁÖ´Â Ä¿³Î °´Ã¼ ŸÀÔÀ¸·Î ÇÁ·Î¼¼½º ³»¿¡¼ °íÀ¯ÇÑ 32ºñÆ® ÇÚµé·Î Á¤ÀǵȴÙ. À̺¥Æ®´Â ¼öµ¿ ¸®¼Â À̺¥Æ®¿Í ÀÚµ¿ ¸®¼Â À̺¥Æ®°¡ ÀÖÀ¸¸ç, »óÅ´ ½Ã±×³Î »óÅÂ(TRUE)¿Í ºñ½Ã±×³Î »óÅÂ(FALSE) µÎ °¡Áö°¡ ÀÖ´Ù. DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); WaitForSingleObject()ÇÔ¼ö´Â ù¹ø¤Š ÆĶó¸ÞÅÍ·Î ÁöÁ¤µÈ °´Ã¼°¡ ½Ã±×³Î »óÅ°¡ µÉ¶§±îÁö ½º·¹µå¸¦ º¸·ù½ÃŲ´Ù.(º¸·ù »óÅÂÀÇ ½º·¹µå´Â °ÅÀÇ CPU cycleÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.) µÎ¹ø° ÆĶó¸ÞÅʹ ŸÀӾƿô°£°ÝÀ¸·Î INFINITE·Î ¼³Á¤Çϸé ÇÔ¼ö´Â À̺¥Æ®°¡ ½Ã±×³Î »óÅ°¡ µÉ ¶§±îÁö ¹«ÇÑÁ¤ ´ë±âÇÑ´Ù. ŸÀӾƿô °£°ÝÀ» 0À¸·Î ¼³Á¤Çϸé WaitForSingleObject()´Â ¸í½ÃµÈ À̺¥Æ®°¡ ½Ã±×³Î »óÅÂÀÎ °æ¿ì WAITE_OBJECT_0¿Í ÇÔ²² Áï½Ã ¸®ÅϵȴÙ. CEvent Class¸¦ »ç¿ëÇϱâ À§Çؼ´Â StdAfx.h¿¡ #include <afxmt.h> ¸¦ Ãß°¡ÇØ¾ß ÇÑ´Ù. example) ¾Æ·¡ ¿¹¿¡¼ ÀÛ¾÷ÀÚ ½º·¹µå´Â OnInitDialog()ÇÔ¼ö¿¡ ÀÇÇؼ ÀÛµ¿Çϱ⠽ÃÀÛÇϸç, WaitForSingleObject()´Â start¹öÆ°¿¡ ÀÇÇØ À̺¥Æ®°¡ ½Ã±×³Î »óÅ°¡ µÇ±â¸¦ ¹«ÇÑÁ¤ ±â´Ù¸°´Ù. CEvent g_eventStart; CEvent g_eventKill; UINT ComputeThreadProc(LPVOID pParam) { ::WaitForSingleObject(g_eventStart,INFINITE); ~ if(::WaitForSingleObject(g_eventKill,0)==WAIT_OBJECT_0) { break; } //if¹®Àº ¹Ýº¹ÀûÀÎ ÀÛ¾÷ ¼Ó¿¡ Æ÷ÇԵǾî¾ß ÇÑ´Ù. ::PostMessage((HWND)pParam,WM_THREADFINISHED,0,0); // ½º·¹µå°¡ ¿Ï·áµÇ¾úÀ½À» ¸ÞÀÎ ½º·¹µå¿¡ ¾Ë¸°´Ù. return 0; } ::OnInitDialog() {~ AfxBeginThread(ComputeThreadProc,GetSafeHwnd()); ~} OnStart() //Start Button Handler {~ g_eventStart.SetEvent(); // Start Event¸¦ signal»óÅ·Π¸¸µç´Ù. ~} OnCancel() // Cancel Button Handler {~ g_eventKill.SetEvent(); // Kill Event¸¦ signal·Î ¸¸µç´Ù. ~} |