|
2007/07/20일에 김태선님이 작성한 "[677] 지정 함수를 쓰레드에 실어서 실행시키는 클래스"
사용하기 간편하게 스택 생성할 수 있는 쓰레드 클래스 버전에 대한 질문입니다.
하기 코드 보면 TThread의 Terminate 구문이 없습니다.
제가 추가하고 싶지만 아직 내공이 딸려 방법이 없습니다.
혹시 이 코드의 쓰레드 종료 함수에 대해 추가 첨삭 가능하신분 부탁드립니다.
class CRunThread
{
class TRunThread : public TThread
{
private:
TNotifyEvent OnEvent;
TObject* Sender;
public:
__fastcall TRunThread(TNotifyEvent event, TObject* sender)
: TThread(false)
{
FreeOnTerminate = true;
OnEvent = event;
Sender = sender;
}
void __fastcall Execute()
{
OnEvent(Sender);
}
};
public:
CRunThread(TNotifyEvent event, TObject* sender)
{
TRunThread* thread = new TRunThread(event, sender);
}
};
//---------------------------------------------------------------------------
// 요건 쓰레드에 실어서 실행할 함수 입니다.
void __fastcall TForm1::TestFunc(TObject *Sender)
{
// 엄청 시간이 걸리는 루틴.
int k;
for(int c = 0; c < 199999999; c++)
{
k = c;
k++;
c = k;
c--;
}
Caption = k;
Button1->Enabled = true;
}
//---------------------------------------------------------------------------
// 쓰레드를 생성한후 쓰레드에서 함수를 실행한후 즉시 리턴해 프로그램 실행을 계속한다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Button1->Enabled = false;
CRunThread thread(&TestFunc, Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Caption = "하하하";
}
//---------------------------------------------------------------------------
|