|
쓰래드는 TThread를 상속받아서 만드시면 편리합니다.
님께서 만드신 Class A도 TThread를 상속받으시면 좋을듯...
primary-thread에 있는 폼이나 processbar 등 GDI객체에 상태를 변화시켜 적용하려면
Synchronize 를 이용하시구요
TForm에 함수는 아래와같이 넘기시며 됩니다.
--------------예제----------------------
typedef void __fastcall (__closure *TStatusEvent)();
class TMyThread : public TThread
{
public:
TStatusEvent OnStatusEvent;
__fastcall TMyThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
//
}
void __fastcall TMyThread ::Work(int i)
{
Sleep(100);
}
void __fastcall TMyThread ::Execute()
{
for(int i=0;i<100;i++)
{
//오래 걸리는 복잡한 작업
Work(i);
if(OnStatusEvent)
Synchronize(OnStatusEvent);
}
}
};
void __fastcall TForm1::ThreadProgress()
{
ProgressBar1->Position++;
if(ProgressBar1->Position==ProgressBar1->Max)
{
ShowMessage("작업이 끝났습니다.");
}
}
//-------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ProgressBar1->Position=0;
TMyThread *tred=new TMyThread(true);
tred->OnStatusEvent=ThreadProgress;
tred->Resume();
}
//---------------------------------------------------------------------------
그럼..
진수.네모 님이 쓰신 글 :
: 빌더를 통해서 폼을 만들었습니다. 그리고 class A {}; 를 만들었습니다.
:
: 빌더에서 A 의 객체를 생성해서 씁니다. 주요한 작업은 모두 여기서 처리합니다.
:
: 이때 객체에서 처리해야 할 것이 많아 시간이 무지하게 걸립니다.
:
: 그래서 메인폼에 게이지를 두어서 처리되는 량을 보이고 싶습니다.
:
: 그래서 메인폼의 변수를 어떻게 액세스 할 수 있는지 알고 싶습니다.
:
:
: 또다른 질문은 객체에서 처리되는 양이 많아 그동안 메인 폼이 먹통이 된다는데 문제가 있습니다.
:
: thread를 만들어야 한다는 것은 아는데 어디서 부터 시작해야 할 지 잘 모르겠습니다.
:
: 팁&트릭 란에는 함수를 thread에 실어 동작하게 하는 것이 있는데
: 제가 만든 클래스 자체를 thread로 동작하게 할 수있는 방법이 있는지요?
:
: 질문이 올바른지 잘 모르겠습니다 ㅡ.ㅡ;;
:
: 감사합니다.
|