|
안녕하세요..
제가 쓰레드를 만들어서 프로그램을 하는데 시작버튼을 누르면 쓰레드가 20개가
만들어져요..그리고 멈춤버튼을 누르면 만들었던 20개 쓰레드를 바로 제거하고 싶거든요.
그리고 프로그램을 종료하면 쓰레드가 잇으면 다시 제거하고 난 후, 프로그램을 종료하고
싶은데. 잘 안되네요.
책에서는 TThreadList로 생성된 쓰레드 객체를 저장하고 난후, Terminate명령을 주던데
그렇게 하면..바로 죽지가 않앙요...그거는 쓰레드의 샐행부분에 제가
시간지연을 좀 주거든요. 그래서 인지 그 시간 지연 함수로 들어가버리면,,,그일 다음에 할 일을 다하고 난 후에나 쓰레드가 멈추더라구요.
그런데 그 주기를 1시간라고 하면 한시간동안 안 죽을거 아닌가요?
ㅡ,ㅡ
그래서 바로 죽일 수 있는 함수가 있을 듯 한데 어떻게 사용하는지요.
그리고 나갈때 바로 Terminate시키니깐 프로그램이 비정상적으로 종료되었다고 난리가 아니네요.
말이 길어졌는데 쓰레드를 만들고 쓰레드를 마음대로 없애고 쓰레드에게 제가 원하는 메세지를
보낼 수 있는 방법이 없나요?
CThread *T;
int i;
for (i=0;i<20;i++)
{
T = new CThread(false);
CThreadList->Add(T);
}
이런식으로 20개의 쓰레드를 생성해 리스트에 넣었습니다.
그리고 아래처럼 죽이고 있는데...잘안되네요.
TThreadList CThreadList;
reinterpret_cast<CThread*>(CThreadList->Items[i])->Terminate();
reinterpret_cast<CThread*>(CThreadList->Items[i])->WaitFor();
이런식으로 종료를 하는데 잘 안되네요.
실행부분엔 시간 지연 함수가 들어가 있어요.
void __fastcall CThread::delay1(float msec)
{
long StartTime, EndTime, ElapseTime;
DWORD timeout = (msec*1000UL) + GetCurrentTime();
while(GetCurrentTime() < timeout)
{
Application->ProcessMessages();
if (Terminated) ExitThread(0);
}
}
이런 식의 함수...
while(!Terminated)
{
delay1(30);
Synchronize(AddData);
}
여기서 30초 딜레이 시키니깐 Terminate()함수를 호출해도 delay1()루틴으로 들어가면 어쨌거나
Synchronize()까지는 자동으로 가네요...전 그전에 죽이고 싶어요..그래서 시간지연함수에
ExitThread(0);을 넣었는데 별 도움이 안돼네요...제가 체계가 없어서 이것저것 다해보고 있는데
고수님들이 답변부탁합니다.
|