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
[27770] [질문]쓰레드..
초보 [carl] 829 읽음    2003-11-04 23:12
전 쓰레드 안에 쓰레드가 또 존재합니다.
우선 외부에서 쓰레드를 호출하고요..

//외부에서 호출
    if(!Thread1) Thread1= new Thread1(ThreadSel);
    else {
      BootThread->Terminate();
      BootThread = NULL;
    }

//

//쓰레드1 생성자
__fastcall Thread1::Thread1(int Num)
        : TThread(true)
{
  FreeOnTerminate = false;   //false로 설정
  ThreadNum = Num;
  Resume();
  Priority = tpTimeCritical;
}
void __fastcall Thread1::Execute()
{
  while(!Terminated && ThreadFlag == 1 )
  {
        if(!Thread2)  Thread2= new Thread2(true);  //새로운 쓰레드 생성
        else {
          Thread2->Terminate(); 
          Thread2= NULL;        
        }
        UpdateThread();  //쓰레드에서 함수 실행.
        ThreadFlag = 0;
        Thread1->Terminate();   //Thread1제거
        Thread1= NULL;
    }
}
////////////두번째 쓰레드
//쓰레드2 생성자
__fastcall Thread2::Thread2(bool OnOff)
        : TThread(true)
{
  FreeOnTerminate = false;   //위 함수에서 두번쨰 쓰레드를 없애기 위헤 Terminate를
                             // 썼으므로false로 설정 . 그러나 만일 자동으로 할려구 해도 위에
                             //Terminate를 없래고 true로 해도 에러가 발생합니다.
  TurnOnOff = OnOff;
  Resume();
  Priority = tpNormal;
}
void __fastcall Thread2::Execute(void)
{
    while(!Terminated && TurnOnOff == true)
    {
      UpdateTurnOn();
      TurnOnOff = false;
    }
    EndBulOnOff();
    Thread2->Terminate();  //이부분에서 제거합니다.
    Thread2= NULL;       //
}

컴파일을 해서 디버깅을 해도 Thread1이 Thread2보다 먼저 소멸되서 생기는 문제 같은데..
명확히 잘 모르겠네여..
위의 쓰레드가 진행되는 동안 중간에 프로그램을 닫으면
"Win32Error ..code 1400"가 발생하는데 잘 모르겠습니다.
잘못된 코드가 있으면 좀 알려주세여..

+ -

관련 글 리스트
27770 [질문]쓰레드.. 초보 829 2003/11/04
27777     Re:[질문]쓰레드.. 박지훈.임프 1029 2003/11/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.