|
바쁘신중에 답을 주셔서 정말 감사합니다.
아래 소스처름 Terminate();를 호출하면 쓰레드가 종료 되면서 자체 메모리가 해제되고,
따라서 쓰레드를 동적으로 생성한 것 => TSori = new TSound("SD_3");
요놈은 delete TSori 가 할 필요가 없군요.
정말 감사합니다.
외랑 님이 쓰신 글 :
: 첫번째 답변 : 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();
: : }
|