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
[4839] Re:TThread 에서.. Execute를 빠져나온다음(종료)에 다시 Execute를 실행되게 하려면...
박지훈.임프 [cbuilder] 3720 읽음    2001-01-09 22:08
조재영 님이 쓰신 글 :
: 안녕하세요~
:
: 음.. TThread를 다루면서 궁금한게 생겨서용.
:
: 1. TThread가 완전히 종료된다음에, 다시 Execute가 실행되게 할려면 어떻게...
: 2. TThread가 종료되었을때 호출되는 이벤트 함수를 지정하더라도
:    TThread가 완전히 종료되기 전에 호출되는걸로 압니다.
:    TThread가 완전히 종료되었을때 알아낼려면 어떻게 해야할까요.. T_T
:   
:
: 감사합니다~



임펠리테리입니다.

아래 한꼬맹이님이 가능하다고 하셨는데... TThread의 Execute()가 종료된 후 다시 들어가도록 할 수는 없습니다. 이유는, Execute() 함수가 쓰레드 자신이기 때문입니다.

Win32 API에서 쓰레드를 생성하기 위해 CreateThread() 함수(혹은 CreateThreadEx()함수)를 사용하는데, 여기에 인자로 쓰레드의 코드가 될 함수의 포인터를 넘깁니다. CreateThread() 함수가 쓰레드를 생성하는데 성공하고 만약 즉시 실행하도록 플래그를 넘겼다면 즉시 넘겨준 함수가 실행되며, 지연실행되도록(suspended) 설정한 경우 ResumThread()를 호출하면 역시 앞서 생성하면서 넘겨줬던 아까 그넘의 함수를 실행합니다.

다시 말해, Win32 API에서 쓰레드를 생성하면서 넘겨줬던 함수가 쓰레드의 코드 자체라는 말입니다. 그러므로 이 함수가 끝나면 쓰레드도 종료되고 사용했던 모든 메모리가 디폴트쓰레드로 반환됩니다.

VCL의 TThread는 Win32 API의 쓰레드 함수들을 사용하기 편하게 클래스로 래핑한 것에 불과합니다. 쓰레드가 실행을 시작하면 아까 말씀드렸던 CreateThread() 함수에 Execute() 멤버가 넘겨지고, 이 Execute() 함수가 쓰레드의 본체로서 동작하는 겁니다. 그러므로 Execute()가 종료되면 쓰레드도 종료됩니다. (실제로는 조금 더 복잡하게 되어있습니다)

FreeOnTerminate를 false로 설정하는 경우에도 쓰레드 자체가 끝나는데에는 변함이 없습니다. 단지 TThread 객체가 자동으로 메모리에서 파괴되지 않을 뿐입니다.

어떤 이유로 Execute()를 다시 호출하려고 하시는지 모르겠네요. 만약 쓰레드를 파괴하지 않고 일시적으로 중지해야 할 경우가 있다면 Suspend() 함수로 일시 정지시켰다가 다시 호출하면 되는데요.

그럼 이만...

+ -

관련 글 리스트
4829 TThread 에서.. Execute를 빠져나온다음(종료)에 다시 Execute를 실행되게 하려면... 조재영 3078 2001/01/09
4839     Re:TThread 에서.. Execute를 빠져나온다음(종료)에 다시 Execute를 실행되게 하려면... 박지훈.임프 3720 2001/01/09
4851         Re:Re:TThread 에서.. Execute를 빠져나온다음(종료)에 다시 Execute를 실행되게 하려면... 조재영 3570 2001/01/10
4838     Re:TThread 에서.. Execute를 빠져나온다음(종료)에 다시 Execute를 실행되게 하려면... 한꼬맹이 3196 2001/01/09
4841         Re:Re:TThread 에서.. Execute를 빠져나온다음(종료)에 다시 Execute를 실행되게 하려면... 한꼬맹이 3371 2001/01/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.