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
[7866] Re:thread 질문임다~
제임스 [] 1549 읽음    2001-05-31 10:48
이종빈 님이 쓰신 글 :
: thread를 생성해서 돌리다가 없애기위해서
:
: thread->Terminate();
: delete thread;
: thread = NULL;
:
: 이렇게 했습니다.
:
: 'delete thread;'를 하면 thread의 distructor가 호출되는데,
: 그 호출되는 시점이 thread의 Execute()가 종료된 다음에 호출이 되나요?
:
: 아님 Execute()가 종료하는 중간에 바로 distructor가 호출되나요?
: 호출되는 시점이 지 멋대루네요..
:
: 답변 부탁드립니다..
: 즐프하세요~~
:

다음과 같이 하세요.

thread->Terminate();        //thread->Terminated 에 true가 설정된다.
thread->WaitFor();
thread=NULL;
//----------------------

Execute()
{
     while (!Terminated)
     {

     }

}

먼저 thread는 계속 while()사이를 배회하고 있습니다. 즉 쓰레드가 열심히 활동하고 있습니다.

그러던중 쓰레드를 종료하라는 메세지가 등장합니다.

즉 thread->Terminate();  이게 그거죠.

근데 Terminate()한다고 해서 바로 끝나는게 아닙니다.

while (!Terminated)
{
       a;
       b;
       c;
       d;
       e;

}

위에서 c줄을 실행하고 있는 시점에 있을때 thread->Terminate()가 호출되었다고 한다면

d,e줄을 실행시키고 난 다음 Terminated == true로 되어 while문을 빠져 나가게 되는 것입니다.

그리고 쓰레드의 작동이 끝나게 됩니다. 아직은 쓰레드에 할당된 메모리가 제거 되어 있지는 않습니다.


따라서 thread->Terminate()한다음 delete가 바로 오면 자주 다운되는 현상을 경험하실수가 있습니다.

while 사이에서 진행중일때 소멸을 시키기 때문이죠.


thread가 완전히 Terminate()되는 것을 기다리기위해서

thread->WaitFor() 쓰레드의 종료를 기다립니다.

그리고 delete thread;

메모리에 할당된 thread 객체를 삭제합니다.



ps. 틀린 부분이 있으면 정정 바랍니다.
저도 초짜라...자그나마 도움이 되길 바라며.

+ -

관련 글 리스트
7819 thread 질문임다~ 이종빈 1318 2001/05/28
7866     Re:thread 질문임다~ 제임스 1549 2001/05/31
7869         Re:Re:thread 질문임다~ 이종빈 1344 2001/05/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.