델파이 예제에 보면
C:\Program Files\Borland\Delphi6\Help\Examples\Prgrsbar
예제가 있습니다.
그런데 제 컴퓨터에서 동작을 안하는군요
실행하고 화면의 create thread버튼을 누르면 프로그램이 멈춥니다.
그래서 찾아봤더니
constructor TMyThread.CreateIt(PriorityLevel: cardinal; ProgBar : TProgressBar);
begin
inherited Create(true); // Create thread suspended
Priority := TThreadPriority(PriorityLevel); // Set Priority Level
FreeOnTerminate := true; // Thread Free Itself when terminated
PB := ProgBar; // Set reference
Synchronize(InitProgressBar); // Setup the ProgressBar --> 여기서 멈춥니다.
Suspended := false; // Continue the thread
end;
위 Synchronize(InitProgressBar);이부분을 주석 처리하면 정상적으로 동작합니다.
이유가 궁금합니다.
안녕하세요..
TThread의 Synchronize 메소드는 VCL을 스레드가 단독으로 사용할 수 있게 해주는 것이죠..
그런데 메인메소드인 Execute와 함께 작업스레드가 실행이 되면
메모리 부분에서 당연히 문제가 생기겠죠.. (같은 메모리영역을 차지하므로..)
그렇기 때문에 VCL을 사용하는 코드를 가진 함수를
Synchronize메소드로 호출하려면 Execute메소드에서 해주어야합니다.
TThread에서 가장 이해하기 까다로운 부분이 바로 Synchronize죠..
저도 아직 100%이해 못했습니다만 -_-;; 도움이 되셨으면 좋겠네요
그럼 즐코하세요 ^ㅡ^;