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
[70962] 쓰레드가 자동 종료되는 경우가 있나요??
newhuni [] 2836 읽음    2014-02-27 12:05
안녕하세요. 조언좀 구하고 싶어서 글을 올립니다.

쓰레드를 실행시켜 PLC와 통신을 하여 데이타를 읽어오는 프로그램을 작성했습니다.
문제는 겉보기에는 잘 동작하는데 중간에 쓰레드만 죽어버리는 현상이 발생합니다.

아래 코드에서 "여기(1)" 부분 말고는 쓰레드를 Terminate()시키는 코드가 소스에서 존재하지 않습니다.
그리고 쓰레드에서 PLC와 통신하다 문제가 발생하면 다시 PLC와 통신을 시도하는 함수 타이머를 Enable시키고
쓰레드를 종료합니다.

그런데... 통신 재연결 타이머도 실행되지 않은 상태에서 쓰레드가 죽어버리는 현상이 발생합니다.
에러메시지도 발생하지 않고 프로그램을 처음 실행하면 잘 동작하다 어느순간 쓰레드만 죽어버리는 것 같습니다.
어떤 경우에 프로그램을 실행되고 쓰레드만 죽을 수 있을까요?
만약 이런일이 발생되면 어떻게 예외처리를 할 수 있을까요? 쓰레드를 계속 감시해야 하나요?

고수님의 조언 부탁드립니다.

//-----------------------------------------------------------------------
__fastcall TReadData::TReadData(bool CreateSuspended)
    : TThread(CreateSuspended)
{
        FreeOnTerminate = true; // 쓰레드 자동 메모리 해제
}
//-----------------------------------------------------------------------
void __fastcall TReadData::Execute()
{
        while(!Application->Terminated && !this->Terminated)
        {
    WaitForSingleObject(NULL, 2000);  // 2초간 지연
    if(ReadData() == false){      // 통신 끊기면 쓰레드 종료
            this->Terminate(); // <---- 여기(1)
    }
        }
}
//-----------------------------------------------------------------------
bool __fastcall TReadData::ReadData()
{
        for(int i=0;i<100;i++)
        {
             :
             : (작업수행)
             :
             if(PLC와의 통신 연결 실패시)
             {
                   // PLC와의 통신 재연결 함수 호출 타이머 작동 후 리턴
                   return false;
             }
        }
        return true;
}
//-----------------------------------------------------------------------

+ -

관련 글 리스트
70962 쓰레드가 자동 종료되는 경우가 있나요?? newhuni 2836 2014/02/27
70971     Re:쓰레드가 자동 종료되는 경우가 있나요?? 송신영 4028 2014/02/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.