|
VCL의 Control은 근본적으로 Thread에서 생성하면 안됩니다.
(Thread에서 GUI를 건들면 안됨)
아래 코드도 Synchronize를 이용했기 때문에 Thread가 아닌
GUI-Thread(메인 쓰레드)에서 Control을 생성하게 됩니다.(코드에 좀 버그가 있음)
괜한 자원만 낭비되고
또 Synchronize가 GUI쓰레등 입장에서는 비동기 이므로
객체 생성시퀀스를 조절하기도 쉽지 않죠
여튼 전혀 유익이 없는 방식이라 생각됩니다.
그럼..
악두이 님이 쓰신 글 :
: 안녕하세요
: 큰 파일을 읽어올때 파일을 읽어오는 중이라는 것을 보여주기 위해 프로그래스바를 만들어 보여주려고 합니다.
: 그러기위해 쓰레드를 사용할 예정인데 쓰레드 내에서 프로그래스바를 생성하면 폼에 그려지지 않아 어떤점이 잘 못 되었는지
: 확인을 부탁드리기 위해 문의 드립니다.
:
: 소스
: 쓰레드를 생성시키는 폼 부분
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: Form2->Show();
: ProgressBar* t = new ProgressBar(true, Form1);
: TButton* tt = new TButton(this);
: tt->Parent =Form2;
: tt->Show();
: }
: //---------------------------------------------------------------------------
:
: 쓰레드 부분
: __fastcall ProgressBar::ProgressBar(bool CreateSuspended)
: : TThread(CreateSuspended)
: {
: }
: __fastcall ProgressBar::ProgressBar(bool CreateSuspended, TComponent* parent)
: : TThread(CreateSuspended)
: {
: TComponent* FParent = parent; //프로그래스를 그릴 폼을 받아오는 부분
: }
: //---------------------------------------------------------------------------
: void __fastcall ProgressBar::Execute()
: {
: Synchronize(&Progressing);
: }
: //---------------------------------------------------------------------------
: void __fastcall ProgressBar::Progressing()
: {
: Bar = new TcxProgressBar(FParent); //프로그래스 생성
: Bar->Parent = (TWinControl*)FParent; //프로그래스바의 부모 지정
: Bar->Show(); //프로그래스바 보이기
: }
:
|