±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
°­ÁÂ, ÆÁ, Á¤º¸ °­ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù.
±Û³»¿ë - °­ÁÂ, ÆÁ, Á¤º¸
 À͸íÇÔ¼ö+¾²·¹µå¸¦ È°¿ëÇÑ °£´ÜÇÑ ¾²·¹µå »ç¿ë ¹æ¹ý
Ŭ¶ó¿ì
(Á¶´ëÇö)
2018-03-03 ¿ÀÈÄ 10:08:15
Ä«Å×°í¸®: ÆÁ
4449ȸ Á¶È¸



µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
±âÁ¸¿¡´Â TThread¸¦ »ó¼ÓÇÏ¿© ±¸ÇöÇÏ¿´±â¿¡ Ãʺ¸½ÃÀý¿£ Á¢±Ùµµ ¾î·Æ°í Àá±ñ ¾²·¹µå°¡ ÇÊ¿äÇÑ ½ÃÁ¡¿¡¼­ÀÇ È°¿ëµµ ¹ø°Å·Î¿ü½À´Ï´Ù.
´ÙÇàÈ÷ µ¨ÆÄÀÌ 2010¹öÀüºÎÅÍ À͸íÇÔ¼ö°¡ Á¦°øµÇ¾ú´Âµ¥ ´öºÐ¿¡ ¾²·¹µå¸¦ ¾ÆÁÖ ¼Õ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
´Ù¸¸, ¿©±â¼­´Â ÀÚ¼¼È÷ ¼³¸íÇÒ ¼ø ¾øÁö¸¸ ¾ÈÀüÇÑ ¾²·¹µå »ç¿ëÀ» À§ÇØ Å©±â 2°¡Áö¸¦ ÁöÄѾߠÇÕ´Ï´Ù.

1) ¾²·¹µåÀÇ begin ~ end ºí·Ï »çÀÌ¿¡¼­ UI¸¦ Á¶ÀÛ(º¯°æ, ¼öÁ¤, »èÁ¦µî)ÇÒ¶§´Â Syncronize¸¦ ÀÌ¿ëÇÑ´Ù.
2) ´Ù¸¥ ¾²·¹µå¿Í µ¿½Ã¿¡ °°Àº ÀÚ¿ø(º¯¼ö, Å¬·¡½ºµî)À» °øÀ¯(µ¿½Ã¿¡ Àаųª ¾²´Â ÇàÀ§, Æ÷ÀÎÅ͸¦ ÂüÁ¶Çϴ ÇàÀ§)ÇÏÁö ¾Ê´Â´Ù.

°£´ÜÇÑ ¿¹Á¦ÀÔ´Ï´Ù.

1. 100ms Å¸À̸Ӡ¸¸µé±â

µ¨ÆÄÀÌ ±âº» Å¸À̸Ӵ À©µµ¿ì À̺¥Æ® ¹æ½ÄÀ¸·Î ±¸ÇöµÇ¹Ç·Î ´ÙÀ½°ú °°Àº Ä¡¸íÀûÀΠ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù.

1) Á¤È®µµ°¡ ¶³¾îÁö°í(À©µµ¿ì ÄÁµð¼Ç¿¡ µû¶ó 100~500ms ÀÌÇÏ ÀÛµ¿ ºÒ±ÔÄ¢)
2) ¸ÞÀÎUI(¸ÞÀξ²·¹µå)°¡ ¸ØÃßÁö ¾Ê°í ÀÛ¾÷ ºÒ°¡´É

±×·¡¼­ Çʼö·Î ¾²·¹µå¸¦ ÀÌ¿ëÇѠŸÀ̸Ӹ¦ »ç¿ëÇÏ°Ô µË´Ï´Ù.
À͸íÇÔ¼ö¸¦ »ç¿ëÇϸ頾Ʒ¡¿Í °°ÀÌ ¼Õ½±°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù.

procedure TForm1.FormCreate(Sender: TObject);
begin
    TThread.CreateAnonymousThread(procedure
    begin
      while Applicaton.Terminated do
      begin
        Sleep(100);
        DoTimerTick; // DoTimerTick¿¡¼­ ¼Ò¿äµÇ´Â ½Ã°£À» ¸ðµÎ ±â´Ù¸®¹Ç·Î while¹®À» ÅëÇØ Áߺ¹ ½ÇÇàµÇÁö´Â ¾Ê½À´Ï´Ù.
      end;
    end).Start;
end;

procedure TForm1.DoTimerTick1;
var
  i, k: integer;
begin
  // ¿©±â¼­ºÎÅÍ ¹é±×¶ó¿îµå ÀÛ¾÷À» Çϸ頵˴ϴÙ.
  // ¸ÞÀΠUI¸¦ ¸ØÃß°Ô ÇÏÁö ¾Ê½À´Ï´Ù.

  // ÀÌ·± for ±¸¹®µµ ¾ÆÁÖ ºü¸£°Ô µ¿ÀÛÇϸ砸ÞÀÎUIµµ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÕ´Ï´Ù.
  for i ;= 0 to 9999999999 do
  begin
    Inc(k);
  end;

  // sleepµµ ¸ÞÀÎUI°¡ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÕ´Ï´Ù.
  sleep(1000);

  // ¸ÞÀΠUI¸¦ Á¶ÀÛÇÏ·Á¸é Synchronize Ã³¸®ÇÕ´Ï´Ù.
  TThread.Synchronize (TThread.CurrentThread, procedure ()
  begin
    Label1.Caption := IntToStr(k);
  end);
  
  ShowLogMsg('ŸÀ̸ӠÀÛµ¿ Áß...');
end;

procedure TForm1.ShowLogMsg(AMsg: String);
begin
  // ÃÖÃʠȣÃâ ½ÃÁ¡ÀÌ ¾²·¹µå¶ó¸é ¾Æ·¡¿Í °°ÀÌ Synchronize Ã³¸®
  TThread.Synchronize (TThread.CurrentThread, procedure ()
  begin  
    Memo1.Lines.Add(AMsg);
  end);
end;


2. ¹öÆ° Å¬¸¯ ½Ã ´ë±â½Ã°£ ±¸Çö

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := 'ÆÄÀÏ º¹»ç ½ÃÀÛ';

  TThread.CreateAnonymousThread(procedure
  begin
    FileCopy('c:\org.avi', 'd:\dst.avi'); // ¿ë·® 100mb avi ÆÄÀÏ º¹»ç 

    TThread.Synchronize (TThread.CurrentThread, procedure ()
    begin  
      Label1.Caption := 'ÆÄÀÏ º¹»ç Á¾·á';
    end);
  end).Start;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  TThread.CreateAnonymousThread(procedure
  begin
    TThread.Synchronize (TThread.CurrentThread, procedure ()
    begin  
      Edit1.ReadOnly := true;
      Edit1.Caption := '2ÃÊ ÈÄ ÀԷ °¡´É';
    end);
    
    Sleep(2000);
 
    TThread.Synchronize (TThread.CurrentThread, procedure ()
    begin  
      Edit1.ReadOnly := false;
      Edit1.Caption := 'ÀÌÁ¦ºÎÅÍ ÀԷ °¡´É';
    end);    
  end).Start;
end;