|
전 쓰레드 안에 쓰레드가 또 존재합니다.
우선 외부에서 쓰레드를 호출하고요..
//외부에서 호출
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"가 발생하는데 잘 모르겠습니다.
잘못된 코드가 있으면 좀 알려주세여..
|