C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[71828] Re:[질문] Thread의 깔끔한 종료 처리(Resource 유실 없이..)
[] 5833 읽음    2014-10-03 11:27
class TAniThread : public TThread
{
private:
    TQueue* m_pQueue;
    TEvent* m_pEvent;
protected:
    void __fastcall BeforeDestruction();
    void __fastcall Execute();
public:
    __fastcall TAniThread();
    void __fastcall Stop();
    bool __fastcall Push(void* pData);
};

__fastcall TAniThread::TAniThread() : TThread(false)
{
    m_pQueue = new TQueue();
    m_pEvent = new TEvent();
}

void __fastcall TAniThread::BeforeDestruction()
{
    // ... Queue Clear처리부분 필요
    m_pQueue->Free();
    m_pEvent->Free();
}

void __fastcall TAniThread::Execute()
{
    // 전처리~~

    while(Terminated == false)
    {
        m_pEvent->WaitFor(INFINITE);
        if(Terminated == true)
            break;

        // .... Queue Pop 및 Poped Data 처리....
    }
}

bool __fastcall TAniThread::Push(void* pData)
{
    if(Terminated == false)
    {
        m_pQueue->Push(pData);
        m_pEvent->SetEvent();
        return true;
    }
    return false;
}

void __fastcall TAniThread::Stop()
{
    if(Terminated == false)
    {
        Terminate();
        m_pEvent->SetEvent();
    }
}

-----< Caller >-----

// Thread생성 및 시작
m_pAniThread = new TAniThread();

// Data추가
m_pAniThread->Push(pData);

// Thread 중지 및 파괴
m_pAniThread->Stop();
m_pAniThread->Free();

이정도면 되지 않을까요??

==================================================================================================
땅주인 님이 쓰신 글 :
: 환경: 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 종료.. 
: 

:

+ -

관련 글 리스트
71825 [질문] Thread의 깔끔한 종료 처리(Resource 유실 없이..) 땅주인 4246 2014/10/02
71831     Re:[질문] Thread의 깔끔한 종료 처리(Resource 유실 없이..) 장성호 4560 2014/10/03
71828     Re:[질문] Thread의 깔끔한 종료 처리(Resource 유실 없이..) 5833 2014/10/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.