|
FreeOnTerminate = true;
위와 같이 설정했을 때는 delete하면 안됩니다.
delete ReviewThread; <=== 잘못된 코드
ReviewThread = NULL; <=== 이것도 당연 필요 없습니다.
무한질주 님이 쓰신 글 :
: 저는 쓰레드를 종료하는데 문제가 많아서 쓰레드 종료부분을 다음과 같이 처리하였습니다.
:
: 물론 쓰레드가 종료되고 Main프로그램이 잘 돌아가더라구요.
:
: 문제는 쓰레드를 실행 안 시키고 Main프로그램을 종료하면 아무 문제 없는데
:
: 쓰레드를 실행한 후 Main프로그램을 종료하면 다음과 같은 에러 메세지가 뜹니다.
:
:
: Project project1.exe raised exception class EWin32Error with message 'Win32Error. Code: 1400. 잘못된 창 핸들입니다'. Process stopped. Use Step or Run to continue.
:
:
: 어떻게 된건지 모르겠습니다. 고수님들 좀 부탁드립니다.
:
:
:
:
:
:
:
:
:
:
: //---------------------------------------------------------------------------
:
: 쓰레드 생성은 걍 new 연산자 사용해서 했습니다.
:
: //---------------------------------------------------------------------------
:
: 쓰레드 종료 부분
:
: ReviewThread->Terminate();
:
: delete ReviewThread;
: ReviewThread = NULL;
:
:
: //---------------------------------------------------------------------------
: // 쓰레드 부분입니다.
: //---------------------------------------------------------------------------
: __fastcall TReviewThread::TReviewThread() : TThread(true)
: {
: FreeOnTerminate = true;
: Resume();
: }
: //---------------------------------------------------------------------------
: void __fastcall TReviewThread::Execute()
: {
:
: for ( ; ; )
: {
:
: for ( ; ; )
: {
:
: for ( ; ; )
: {
:
: if ( )
: {
:
: while ( )
: {
:
: if (Terminated) <-----------
: break;
:
: }
:
: if (Terminated) <------------
: break;
:
: }
:
: }
:
: if (Terminated) <------------
: break;
:
: }
:
: if (Terminated) <------------
: break;
: }
:
: }
: //---------------------------------------------------------------------------
:
|