±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
°­ÁÂ, ÆÁ, Á¤º¸ °­ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù.
±Û³»¿ë - °­ÁÂ, ÆÁ, Á¤º¸
 ½º·¹µå¸¦ ¾ÈÀüÇÏ°Ô Á¾·áÇϱâ À§Çؼ­´Â Terminate¸¸ »ç¿ëÇؼ­´Â Àý´ë ¾ÈµË´Ï´Ù. 
µ¿µ¿
(À̵¿±Ù)
2016-07-21 ¿ÀÈÄ 3:22:46
Ä«Å×°í¸®: ÆÁ
6787ȸ Á¶È¸



µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
°ú°Å¿¡, ¾Æ´Ï ÇöÀçµµ µ¨¸¶´çÀ̳ª ³×À̹ö ºí·¯±×¿¡ ¿Ã¶ó¿Â Thread »ç¿ë¹ýÀ» »ìÆ캸¸é, ÀÌ°Ô ¾Æ´Ñµ¥ Çϴ »ý°¢ÀÌ ¸¹ÀÌ µé¾ú½À´Ï´Ù. µ¨ÆÄÀ̴ TThread¶ó´Â Å¬·¡½º¿¡¼­ »ó¼Ó¸¸ ¹ÞÀ¸¸é Æí¸®ÇÏ´Ù°í »ý°¢ÇÒÁö ¸ð¸£°ÚÀ¸³ª »ç½Ç ¿©±â¿¡´Â ¸¹Àº ÇÔÁ¤µéÀÌ ¼û¾î ÀÖ½À´Ï´Ù. ±×°ÍÀ» ¸ð¸¥Ã¤ ÄÚµùÀ» ÇÏ¿© ¿µ»ó ½ºÆ®¸®¹Ö ½Ã½ºÅÛÀ» °³¹ßÇÏ¿´´Âµ¥¿ä, µµ¹«Áö ¿øÀÎÀ» ¾Ë ¼ö¾ø´Â ´Ù¿îÇö»óÀÌ °è¼ÓÇؼ­ ¹ß»ýÇÏ¿´½À´Ï´Ù.¸î³¯ ¸îÀÏÀ» °í¹ÎÇÏ´Ù°¡ °á±¹ ¿øÀÎÀ» ¸ð¸¥Ã¤ ½º·¹µåÀÇ Á¾·á¸¦ Terminate¸¦ »ç¿ëÇÏÁö ¾Ê°í °è¼ÓÇؼ­ resume¿Í suspend¸¦ »ç¿ëÇؼ­ Àá½Ã ¸ØÃè´Ù°¡ ´Ù½Ã µ¿ÀÛÇÏ°Ô ¸¸µé¾î À§±â¸¦ °£½ÅÈ÷ ¸ð¸éÇßÀ» »ÓÀ̾ú½À´Ï´Ù. 

ÀϹÝÀûÀ¸·Î ½º·¹µåÀÇ Execute ÇÔ¼ö¸¦ º¸¸é ´ÙÀ½°ú °°½À´Ï´Ù. 

procedure TMyThread.Execute;
begin
  while not Terminated do
  begin
    (work to do...) 
  end; 
end;

À§¿¡¼­ Terminated ¿¡ False¸¦ ±âÀÔÇϸ頱ݹ栽º·¹µå°¡ Á¾·áµÉ °Íó·³ º¸¿©ÁöÁö¸¸ °áÄÚ ±×·¸Áö°¡ ¾Ê½À´Ï´Ù. ¹°·Ð Ãµ¸¸¹ø¿¡ 9999999¹øÀº Á¤»ó Á¾·áµÉ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ±×·¡µµ ÇѹøÀº ´Ù¿îµÇ´Â Çö»óÀÌ ¹ß»ýÇϴ °ÍÀÔ´Ï´Ù. ÀÌ ¿øÀο¡ ´ëÇÑ °ÍÀº ½º·¹µåÀÇ Á¾·ù¿Í ±¸Á¶¿¡ ÀÖ½À´Ï´Ù. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº ±â¾ïÀÌ °¡¹°°¡¹°Çؼ­... ¾Æ¹«Æ°... 
¼ö¾ï¹øÀ» Á¾·áÇصµ ¾ÈÀüÇÏ°Ô ½º·¹µå°¡ ¸ØÃç¼­°Ô ¸¸µé±â À§Çؼ­´Â À̺¥Æ®¸¦ ÀÌ¿ëÇؾ߸¸ ÇÕ´Ï´Ù. 

±¸±Û¿¡¼­ °¡Á®¿Â ÀڷḦ ÀÌ°÷¿¡´Ù ¿Å°Ü ³õ°Ú½À´Ï´Ù. 

constructor TMyThread.Create;
begin
   //...normal initialization stuff...
   mEvent := TEventObject.Create(nil,true,false,'');
end;
 
{the worker thread's execution}
procedure TMyThread.Execute;
begin
   repeat
      mEvent.WaitFor(INFINITE);
      mEvent.ResetEvent;
      if (work_to_do) then
         //...do_some_work...
 until Terminated;
end;
 
{called from the main thread:}
procedure TMyThread.QueueWork(details);
begin
 //...add_work_details...
 mEvent.SetEvent;
end;

procedure TMyThread.Terminate;
begin
   // Base Terminate method (to set Terminated=true)
   TThread(self).Terminate;
 
   // Signal event to wake up the thread
   mEvent.SetEvent;
end;


¿Ö mEvent¸¦ »ç¿ëÇؾ߸¸ Çϴ °ÍÀϱî¿ä? ÇÏ°í ¹°¾îº¸½Å´Ù¸é... ÇÁ·Î±×·¡¸Ó´Â ±× ¼ö¸¹Àº °³³äÀ» ¸Ó¸®¿¡ µÎ°í »ìÁö´Â ¾Ê½À´Ï´Ù. (¸øÇÕ´Ï´Ù. ³ú°¡ ÅÍÁú±îºÁ¿ä.) ±×³É ±×·¨¾ú¾úÁö, ±×·¡ ÀÌ ¹æ¹ýÀº ¾Æ´Ï¾ú´Âµ¥... Çϴ ½ÄÀÔ´Ï´Ù. 
¿äÁòÀº ±×·¡¼­ ÀÌ·¸°Ô °Ô½Ã±ÛÀ» ³²°Ü³õ½À´Ï´Ù. 


±¸±Û °Ë»ö ÁÖ¼Ò¸¦ ÀÌ°÷¿¡ Àû½À´Ï´Ù. 
http://www.paradicesoftware.com/blog/2014/02/dont-use-suspend-and-resume-but-dont-poll-either/