|
첫번째 답변 : FreeOnTerminate를 True로 두시면 쓰레드가 종료(죽고나서 라는 것은 의미파악이 애매합니다. 중단인지 종료인지, 에러인지.. *^^*)되면 즉 Terminate시에 Free하라는 거죠.. 자체 메모리 해제입니다.
두번째 답변 : 자체 메모리 해제 안하면...당연히 delete 하셔야 하겠죠.. 문제 없습니다.
freeman 님이 쓰신 글 :
: 안녕하세요.
: 아래와 같이 쓰레드를 생성하고 나서.
: 버튼을 클릭하면 TSori 쓰레드가 생성되고 이놈은 소리만 연주하고
: 바로 Terminate();를 호출하여 쓰레드를 죽이고 있는 구조 입니다.
:
: 첫번째 질문 : 생성자에서 FreeOnTerminate = true; 로하면 스레드가 죽고나서
: 모든 쓰레드에 관한 리소스는 반납을 합니까 ?
: 두반째 질문 : "TSori = new TSound("SD_3");" 이 부분이 의문이 가는데
: 통상적으로 new로 동적으로 객체를 생성하면 끝나면 delete TSori;를 해야 하지 않습니까?
: 그냥 계속 ::Button1Click(this)를 수십번 반복해도 이상이 없던데 이렇게 사용해도 문제가 없습니까?
:
: 부탇드립니다. 좋은 날 되세요.
:
:
: TSound *TSori;
: void __fastcall TFSMSSend::Button1Click(TObject *Sender)
: {
: TSori = new TSound("SD_3");
: }
: //---------------------------------------------------------------------------
: // 쓰레드
: //-------------------------------- -------------------------------------------
: class TSound : public TThread
: {
: private:
: char name[20];
: protected:
: void __fastcall Execute();
: public:
: __fastcall TSound(char *p);
: };
:
: __fastcall TSound::TSound(char *sori)
: : TThread(false)
: {
: memset(name,0,20);
: strcpy(name,sori);
: FreeOnTerminate = true;
: }
: //---------------------------------------------------------------------------
: void __fastcall TSound::Execute()
: {
: if(bDllLoad)
: PlasyWave(WaveDllInstance,name) ;
: Terminate();
: }
|