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
[25953] Re:Re:[질문] 쓰레드 때문에 문제가 생깁니다. 고수님들 좀 도와주세요.
강영준 [k700k] 799 읽음    2003-06-16 09:18
ilyusha 님이 쓰신 글 :
: 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;
: :    }
: :
: : }
: : //---------------------------------------------------------------------------

다시 쓰래드를 종료 실행을 하나의 버튼으로 해결할려면..

if(!ReviewThread){
     ReviewThread = new TReviewThread(false);
     }
   else{
     ReviewThread->Terminate();
     ReviewThread = NULL;
     }

물론 FreeOnTerminate = true; 이부분도 차가 되어야 합니다 쓰래드에..

이렇게 해주면.. 쓰래드가 종료 안된상태에서 프로그램을 종료 해도 에러가 안생깁니다.

또한 하나의 버튼으로 쓰래드의 동작 종료를 함께 할수 있죠..




+ -

관련 글 리스트
25946 [질문] 쓰레드 때문에 문제가 생깁니다. 고수님들 좀 도와주세요. 무한질주 676 2003/06/15
25950     Re:[질문] 쓰레드 때문에 문제가 생깁니다. 고수님들 좀 도와주세요. ilyusha 803 2003/06/15
25953         Re:Re:[질문] 쓰레드 때문에 문제가 생깁니다. 고수님들 좀 도와주세요. 강영준 799 2003/06/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.