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
[14957] [질문]쓰레드 관리하는 방법 좀 갈켜주세요.
초보 빌더 사용자 [] 1116 읽음    2002-01-24 19:29
안녕하세요..

제가 쓰레드를 만들어서 프로그램을 하는데 시작버튼을 누르면 쓰레드가 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);을 넣었는데 별 도움이 안돼네요...제가 체계가 없어서 이것저것 다해보고 있는데
고수님들이 답변부탁합니다.
   

+ -

관련 글 리스트
14957 [질문]쓰레드 관리하는 방법 좀 갈켜주세요. 초보 빌더 사용자 1116 2002/01/24
14984     Re:[질문]쓰레드 관리하는 방법 좀 갈켜주세요. 홍성원 1809 2002/01/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.