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
[6964] Re:안녕하세요... 이필호입니다.
이필호 [] 2316 읽음    2001-04-24 09:42
안녕하세요.. 네.. 여기에 자주는 오는는데요.. 글을 안썼을 뿐이죠..
사실 임프님 팁도 많이 도움을 받고 있습니다.

답변주신거 감사합니다..

하지만, 제가 질문드린것은 스레드가 종료되지 않고 메모리에 살아있게 하고..

현재 일을 하고 있는지 아닌지 알수 있는 방법이 있는지 해서 질문드린거예요..

즉, 30개의 쓰레드를 미리 생성해 놓고,

일을 하고 있지 않는 쓰레드를 찾아서 그 쓰레드에 일을 시키고 싶은거죠..

그러니까 30개 모두 메모리에서 해제를 시키지 않은 상태에서 일을 하고 있는지 아닌지를 알고 싶은거죠..

메모리를 자꾸 생성하고 해제하는 시간이 걸리는 것 같아서 메모리를 해제를 안시키려구 하니까

잘 모르겠더라구요..

답변하신 내용은 이미 알고 있는 거 드라구요...

하여간 답변 주신거는 감사하구요..

다시 한번 답변 주시면 감사하겠습니다...

그럼 이만.



박지훈.임프 님이 쓰신 글 :
: 임펠리테리입니다.
: 이필호님, 제 사이트에서는 정말 오랜만이군요. ^^
:
: 소스 전체가 아니라 일부만 있어서 제가 질문을 제대로 이해했는지 확신이 안서네요.
: 제 맘대로 떠들어 보도록 하겠습니다. ^^;;
:
: 일단, Execute() 함수의 끝에서 Suspended를 설정한다고 하더라도 아무 소용이 없습니다.
: Execute()는 win32 쓰레드 그 자체이므로, 일반적으로는 Execute() 내에서 루프를 돌아야 합니다.
: Suspended를 설정하는 코드도 루프 안에 있어야 하구요.
:
: 제가 이해한 바로는, 쓰레드 자체는 종료가 되었으나 FreeOnTerminate가 true로 설정되어 있지 않아 TThread 객체가 파괴만 되지 않고 메모리에 남아있는 것 같습니다.
: 이 FreeOnTerminate 프로퍼티는 디폴트가 false이므로 true로 명시적으로 세팅해주지 않으면 쓰레드의 동작이 종료되어도 TThread 객체는 파괴되지 않습니다.
:
: 그럼 참고하시길...
:
:
: 이필호 님이 쓰신 글 :
: : Thread가 무한정 생성되는것이 아니기 때문에 일정갯수를 미리 생성해서 두고..
: :
: : 할일이 생기면 현재 놀고 있는 Thread에 일을 할당하고 실행시키고...
: :
: : 머 이렇게 하려고 합니다.
: :
: : 그런데 문제가 생기더군요..
: :
: : TThread에 Suspended 라는 프로퍼티가 있긴 한데, 일을 끝내도 true로 설정되지 않아서 놀고 있는지 확인이 안됩니다.
: :
: : Debug결과 TThread 의 Private변수인 FFinshed 는 true인데, FSuspended 는 false 이더군요...
: :
: : private 변수인 FFinshed 에 접근하자니.. 안되고, Suspended 는 true로 설정되지 않구...
: :
: : 그래서 Thread에 일부러 Suspended = true; 로 코딩했으나 결과는 마찬가지더군요..
: :
: : 그래서 말인데요..
: :
: : Thread가 현재 놀고 있는지 아님 먼 일을 하고 있는지 확인 하는 방법좀 알려주세요..
: :
: : 제가 한 코딩을 붙여넣겠습니다..
: :
: : 한수 부탁드립니다.... 그럼 이만..
: :
: : ---------------------------------------------------
: : Thread를 호출하는 쪽
: : ---------------------------------------------------
: :     int i = 0;
: :
: :     while(true)
: :     {
: :         for(i = 0; i < MAX_THREAD_COUNT; i++)
: :         {
: :             if(FThread[i]->Suspended)
: :             {
: :                 FThread[i]->Resume();
: :                 break;
: :             }
: :         }
: :         if(i >= MAX_THREAD_COUNT)
: :             continue;  // 쉬는 Thread가 없으면 다시 루프를 돌고..
: :         else
: :             break;     // 쉬는 Thread에 적절하게 했으면 루프를 빠져나간다.
: :     }
: :
: :
: : ---------------------------------------------------
: : Thread execute() 함수
: : ---------------------------------------------------
: : void __fastcall XThread::Execute()
: : {
: :     // 중간 생략....
: :
: :     Suspended = true;
: : }
: :
: :

+ -

관련 글 리스트
6893 [질문] Thread가 할일하고 놀고 있는지 확인하는 방법.. 이필호 2265 2001/04/18
6953     Re:[질문] Thread가 할일하고 놀고 있는지 확인하는 방법.. 박지훈.임프 2519 2001/04/23
6964         Re:안녕하세요... 이필호입니다. 이필호 2316 2001/04/24
6982             Re:Re:안녕하세요... 이필호입니다. 박지훈.임프 2394 2001/04/24
6990                 에구.. 제가 잘못 이해한거네요.. 헤헤.. 답변 감사합니다.. (내용무) 이필호 2229 2001/04/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.