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

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   [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·Î ¸¸µç´Ù.
~}


HomePage Backward Forward Post Reply List
1998 by swindler