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

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   [MFC] Multi-Threading 1998/07/29 (16:39)
À̸§ swindler
¹øÈ£ 49
Á¶È¸ 439
º»¹® À©µµ¿ìÁî´Â ÀÛ¾÷ÀÚ ½º·¹µå¿Í »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ½º·¹µå
µÎ Á¾·ùÀÇ ½º·¹µå¸¦ Á¦°øÇÑ´Ù. »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ½º·¹µå´Â
À©µµ¿ì¸¦ °¡Áö°í ÀÖ¾î ÀÚ½ÅÀÇ °íÀ¯ÇÑ ¸Þ½ÃÁö ·çÇÁ°¡ ÀÖ´Â
¹Ý¸é ÀÛ¾÷ÀÚ ½º·¹µå´Â À©µµ¿ì¸¦ °®Áö ¾ÊÀ¸¹Ç·Î ¸Þ½ÃÁö¸¦
ó¸®ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
´ÜÀÏ ½º·¹µå ¾îÇø®ÄÉÀ̼ǵµ ÇÑ°³ÀÇ ½º·¹µå(¸ÞÀÎ ½º·¹µå)¸¦
°®´Â´Ù´Â »ç½Ç°ú MFC¿¡¼­ CWinThread·ÎºÎÅÍ CWinApp°¡
ÆÄ»ýµÈ´Ù´Â Á¡(¾îÇø®ÄÉÀ̼ÇÀÌ ¹Ù·Î ½º·¹µåÀÌ´Ù)À» ²À
±â¾ïÇÏÀÚ.

¸ÕÀú, ÀÛ¾÷ÀÚ ½º·¹µå¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸ÀÚ.

ÁÖ·Î ½Ã°£ÀÌ ¸¹ÀÌ °É¸®´Â °è»ê󸮿¡ ¸¹ÀÌ ÀÌ¿ëµÈ´Ù.
ÀÛ¾÷ÀÚ ½º·¹µå¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¸ÕÀú ½º·¹µåÀÇ ¸ÞÀÎ
ÇÁ·Î±×·¥À» À§ÇÑ Àü¿ª ÇÔ¼ö¸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù.
ÀÌ Àü¿ª ÇÔ¼ö´Â UINT¸¦ ¸®ÅÏÇØ¾ß Çϸç, ÆĶó¸ÞÅÍ·Î ´ÜÀÏÀÇ
32ºñÆ®(LPVOID Çü)À» °¡Á®¾ß ÇÑ´Ù. ½º·¹µå°¡ °è»ê󸮸¦
¼öÇàÇÑ ÈÄ Àü¿ªÇÔ¼ö°¡ ¸®Åϵɶ§ ½º·¹µå´Â Á¾·áµÇ¸ç ÇÁ·Î¼¼½º°¡
Á¾·áµÉ ¶§µµ ¿ª½Ã Á¾·áµÈ´Ù. ±×·¯³ª, ¸Þ¸ð¸® ´©ÃâÀ» ¸·±â À§ÇÏ¿©
ÇÁ·Î¼¼½º ¤¸Á¾·áÀü¿¡ ÀÛ¾÷ÀÚ ½º·¹µå°¡ Á¾·áµÇµµ·Ï ÇÏ´Â °ÍÀÌ
¹Ù¶÷Á÷ÇÏ´Ù.

CWinThread *pThread=AfxBeginThread(
ComputeThreadProc,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
//GetSafeHwnd()´Â ÇöÀç À©µµ¿ìÀÇ ÇÚµéÀ» ¾ò´Â´Ù.

UINT ComputeThreadProc(LPVOID pParam)
{
// ½º·¹µå ó¸®ÀÛ¾÷ÀÌ µé¾î°£´Ù.
}

AfxBeginThread()´Â »õ·Ó°Ô »ý¼ºµÈ ½º·¹µå °´Ã¼ÀÇ
Æ÷ÀÎÅ͸¦ ¹Ù·Î ¸®ÅÏÇÑ´Ù. ÀÌ Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÏ¿© º¸·ù,Àç½ÃÀÛ
(CWinThread::SuspendThread, ResumeThread)ÇÒ ¼ö ÀÖÁö¸¸
½º·¹µå¸¦ »èÁ¦ ÇÒ ¼ö ¾ø´Ù.

1. ¸ÞÀÎ ½º·¹µå´Â ÀÛ¾÷ÀÚ ½º·¹µå¿Í ¾î¶»°Ô Åë½ÅÇϴ°¡?
ÀÛ¾÷ÀÚ ½º·¹µå°¡ ¸Þ½ÃÁö ·çÇÁ¸¦ °®Áö ¾ÊÀ¸¹Ç·Î À©µµ¿ìÁî
¸Þ½ÃÁö¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀº »ç¿ëÇÒ ¼ö ¾ø´Ù.°¡Àå °£´ÜÇÑ
¹æ¹ýÀº Àü¿ª º¯¼ö¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. º¯¼öÀÇ °ªÀÌ Æ¯Á¤°ªÀÌ
µÇ¸é Á¾·áµÈ´Ù°í °¡Á¤Çϸé, ¸ÞÀÎ ½º·¹µå´Â Àü¿ª º¯¼ö°ªÀ»
ƯÁ¤°ªÀ¸·Î ¼³Á¤ÇÏ¿© ÀÛ¾÷ÀÚ ½º·¹µå¸¦ Á¾·áÇÒ ¼ö ÀÖ´Ù.

¾î¼Àºí·¯»óÀÇ ¹®Á¦¿Í ·¹Áö½ºÅÍ º¯¼öÀÇ »ç¿ëÀ¸·Î ÀÎÇÏ¿©,
Àü¿ªº¯¼öÀÇ °ª¿¡ ¹®Á¦°¡ ÀÖÀ» ¼ö ÀÖ´Ù.
InterlockedIncrement((long *) &count);
¶ó°í Çϸé, º¯¼ö°¡ Áõ°¡µÇ´Â µ¿¾È ¾×¼¼½ºÇÏ·Á´Â ´Ù¸¥
½º·¹µå¸¦ ¹­À¸¹Ç·Î º¯¼ö°ªÀÌ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÏ°Ô µÈ´Ù.

2. ÀÛ¾÷ÀÚ ½º·¹µå´Â ¸ÞÀÎ ½º·¹µå¿Í ¾î¶»°Ô Åë½ÅÇϴ°¡?
ÀÛ¾÷ÀÚ ½º·¹µå´Â À©µµ¿ìÁî ¸Þ½ÃÁö¸¦ ÀÌ¿ëÇÏ¿© ¸ÞÀÎ ½º·¹µå¿Í
Åë½ÅÇÑ´Ù. Áï ¸ÞÀÎ ½º·¹µå´Â À©µµ¿ì¸¦ °®°Ô µÇ°í, ÀÛ¾÷ÀÚ
½º·¹µå´Â ±× À©µµ¿ìÀÇ ÇÚµéÀ» °®°Ô µÈ´Ù.
ÀÛ¾÷ÀÚ ½º·¹µå°¡ À©µµ¿ì ÇÚµéÀ» °¡Áö°Ô Çϱâ À§Çؼ­´Â
AfxBeginThread()È£Ãâ½Ã 32ºñÆ® ÆĶó¸ÞÅÍ¿¡ À©µµ¿ì
ÇÚµéÀ» Àü´ÞÇÏ¸é µÈ´Ù.
(½º·¹µå´Â ½º·¹µå ÀÚ½ÅÀÌ »ý¼ºÇÑ °´Ã¼¿¡¸¸ Á¢±ÙÀÌ
°¡´ÉÇϱ⠶§¹®¿¡ ´Ù¸¥ ½º·¹µå¿Í °´Ã¼¸¦ °øÀ¯Çϱâ À§Çؼ­
°´Ã¼ Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ¸é °´Ã¼ÀÇ À¯È¿¼º °Ë»ç½Ã(ASSERT_VALID)
¿¡·¯°¡ ¹ß»ýÇϱ⠶§¹®¿¡ °´Ã¼ Æ÷ÀÎÅÍ ´ë½Å ÇÚµéÀ»
»ç¿ëÇØ¾ß ÇÑ´Ù.)
UINT ComputeThreadProc(LPVOID pParam)
{
~
::PostMessage((HWND) pParam, WM_THREADFINISHED,0,0);
~
return 0; // ½º·¹µå Á¾·á
}

HomePage Backward Forward Post Reply List
1998 by swindler