귀하는 손님 이십니다
로그인
회원가입
  
  델마당 공식 은행계좌
  하나은행 227-910235-83607
  예금주 이상국(운영진)
프로젝트 게시판
투표게시판
델마당소개
기초부터 활용까지! 델파이 교육 - 데브기어
 광고문의 :
강좌, 팁, 정보 강좌, 팁, 정보 입니다.
글내용 - 강좌, 팁, 정보
 TThread.Synchronize 잘못 오용하는 경우
coding
(권순호)
2018-03-05 오후 2:37:37
카테고리: 팁
2555회 조회



등록된 파일이 없습니다.
procedure TForm3.Button2Click(Sender: TObject);
begin
    TThread.Synchronize (TThread.CurrentThread, procedure ()
    begin
       Sleep(5000);
    end);
end;


thread safe 가 아닌 vcl 을 이용하기 위해 TThread.Synchronize()를 사용할 경우

TThread.Synchronize()도 마찬가지로 메인 쓰레드 컨텍스트로 돌아가기 때문에
Synchronize() 가 실행되는 지체 시간이 길어지면, 그 시간 만큼 메인쓰레드 UI가 블러킹 됩니다.

쓰레드 사용하는 게 무용지물이 되는 셈이죠. 

쓰레드 개념 없는 사람들이 이를테면 네트웍을 통해 큰 용량의 파일을 전송받는 로직을 만들 때
TThread.Synchronize()를 저런 식으로 이용하는 경우가 많은데 쓰레드를 개념없이 잘못 사용하고 있는 거에요.


TThread.Queue() 도 마찬가지 입니다.


procedure TForm3.Button2Click(Sender: TObject);
begin
    TThread.Queue (TThread.CurrentThread, procedure ()
    begin
       Sleep(5000);
    end);
end;


TThread.Queue()을 호출하면 쓰레드 큐에 넣고 바로 리턴하지만
Snchronize()와 마찬가지로 메인 쓰레드 컨텍스트로 돌아가기 때문에 TThread.Queue() 실행 블럭이 지체되면
지체되는 시간 만큼 메인 쓰레드 UI가 블러킹 됩니다.