TThread에는 FreeOnTreminate라는 프로퍼티가 있습니다.
이 프로퍼티를 true로 해주시면 자동으로 자원이 해제됩니다.
TMyThread::Execute()
{
this->FreeOnTerminate=true;
while(Terminated == false)
{
//작업..
}
}
위와같이 FreeOnterminate가 ture로 되어있으면
아무때나 필요할때 thread가 종료되면(Execute함수 빠져나가면..) 자동으로 자원이 해제됩니다.
sleep해서 기다리다가 delete 해주고 할 필요가 없습니다.
그럼..
땅주인 님이 쓰신 글 :
: 환경: RAD Studio XE5 ( C++ Builder XE5)
:
: Thread를 사용 중입니다. TEvent로 Event를 전달하고 동작하도록 하였습니다.
: Thread를 종료할 때 Sleep()을 쓰는 것이 좀 깨림찍한데요..
:
: 아래의 코드에서 Thread 종료 시킬 때 Sleep()으로 잠시 기다리는 것이 의미가 있는 것인 지?
: 그리고, Thread 종료 후 delete Thread했는데, Thread가 while 루프를 빠지면서 자동 종료하면 굳이 delete를 하지 않아도 되는 것 아닌 지?
:
: // Main Thread
: m_bAniThread = true
: m_pAniThread = new TAniThread(false);// not suspend
: ...
: // Thread 사용할 때
: ThreadQueue->Push(*pData); // Thread에서 사용할 데이터 Queue에 Push
: GAniEvent->SetEvent(); // Thread에 Event를 전달...
: ..
: //Thread 종료할 때..
: m_bAniThread = false;
: GAniEvent->SetEvent();
: Sleep(200); // 스레드가 종료될 때까지 잠깐 기다림 => 이거 필요할까?
: delete m_pAniThread; // 스레드가 자동 종료되면 이 코드가 필요할까요?
:
: Thread의 실행 코드
:
: // TAniThread
: TWaitResult Result;
: while ( FormMain->m_bAniThread ) {
: Result = GAniEvent->WaitFor(1000); // Wait 1 second
: ...
: }
: // While 루프 탈출 후 Thread 종료..
:
:
|