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
[61566] Re:Re:Indy10 의 IdTCPServer에서 Disconnect 하는 문제 문의드립니다.
IKG님 [] 2122 읽음    2010-06-16 10:34
답변감사합니다.
계속 문제가 해결되지 않아서 다시 질문올립니다. ㅠㅠ.

아래와 같이 해보면,...

void __fastcall TfrmMain::IdTCPServer1Disconnect(TIdContext *AContext)
{
    int nID = ((TIdYarnOfThread*)(AContext->Yarn))->Thread->ThreadID;
    bool bTerminated = ((TIdYarnOfThread*)(AContext->Yarn))->Thread->Terminated;
    bool bF = ((TIdYarnOfThread*)(AContext->Yarn))->Thread->Finished;
}

ThreadID는 접속한 Telnet의 ThreadID가 맞게 날라오구요...
bTerminated도 true가 된걸로 나옵니다.
bF는 false로 나옵니다.

Thread는  죽지 않고 있습니다.

그리고는,...

Thread Status의 Location이,..
접속 돼있을때는 $77A764D8 이런거 였었는데,..
접속을 끊으면, CPU가 100% 가까이 되면서 $0000053 ..이런걸로 바뀌고 몇 초 뒤에 에러메시지가 뜹니다.

또, 접속을 끊을때 OnExecute에서 catch를 해보면,
"Contection closed gracefully"라는 메시지가 나오는데, 이것을 찾아보니 신경 쓸 부분은 아니더군요.


Indy10은 자동 해제 된다고 들었는데...
접속 해제할때 따로 뭔가를 해줘야 하나요?..ㅠ.ㅠ.;;..

조언 부탁드립니다..







째즈토끼 님이 쓰신 글 :
: Terminate() 후에 종료되기를 기다리는건
: WaitFor() 라는 메소드가 있어요..
: 필요시에 while 문으로 직접 다른일을 하면서 대기할 수도 있지만 Terminated 를 참조해서는 안됩니다.
: Terminate() 를 호출하면 Terminated가 TRUE가 됩니다.
: 그래서 Thread의 Execute 내에서
:
: while (!Terminated)
: {
: ...
: }
: return;
:
: 처럼 사용을 하면 쓰레드 외부에서 Terminate() 함수를 호출하면 Terminated가 TRUE 가 되면서 쓰레드내의 루프에서 빠져나오게 됩니다.
:
: Stop 이란 메소드는 처음보는것같아 찾아보니 인디쓰레드 메소드네요.. Suspend 되든지 Terminate 되든지 둘중 하나를 수행하는 건데, 종료시에는 그건 사용하지 마시고 그냥 Terminate()만 사용하시면 될것 같은데요...
:
:
: IKG님 님이 쓰신 글 :
: : 안녕하세요.
: :
: : 2009 사용중이고, Indy를 사용해서 만들고 있습니다.
: :
: : 테스트 삼아 텔넷으로 접속해서 데이터를 받는것은 아주 잘 되는데요,...
: :
: : 텔넷의 접속을 끊으면 CPU의 부하가 100%에 육박하도록 올라갑니다.
: :
: : 그러다가, 몇 초 후에,..
: :
: : ".... too many consecutive exceptions: 'access violation at 0x00000053: read of address 0x00000053..."
: :
: : 이런 메시지가 뜬 후, 먹통이 되면서 위의 메시지가 정기적으로 반복해서 계속 나옵니다.
: :
: : 쓰레드 상태를 보니, 죽지 않고 계속 살아 있더군요..
: :
: : 그래서,  IdTCPServer1Disconnect 부분에,..
: :
: : ((TIdYarnOfThread*)(AContext->Yarn))->Thread->Stop();
: : ((TIdYarnOfThread*)(AContext->Yarn))->Thread->Terminate();
: :
: : 등등 을 줬는데도,..
: :
: : 쓰레드가 죽지 않더군요..
: :
: : 다시 테스트 삼아...
: : 아래와 같이 while문을 넣어놓으니깐, CPU 점유율은 올라가지 않고 정상상태인데,...
: : 계속 while문 안에만 있습니다...
: :
: : void __fastcall TfrmMain::IdTCPServer1Disconnect(TIdContext *AContext)
: : {
: :     ((TIdYarnOfThread*)(AContext->Yarn))->Thread->Stop();
: :     ((TIdYarnOfThread*)(AContext->Yarn))->Thread->Terminate();
: :    
: :     while(((TIdYarnOfThread*)(AContext->Yarn))->Thread->Terminated){
: :                ((TIdYarnOfThread*)(AContext->Yarn))->Thread->Terminate();
: :     Sleep(1);
: :     }
: : }
: :
: :
: : 조언 부탁드립니다..ㅠ.ㅠ;...

+ -

관련 글 리스트
61546 Indy10 의 IdTCPServer에서 Disconnect 하는 문제 문의드립니다. IKG님 1654 2010/06/14
61554     Re:Indy10 의 IdTCPServer에서 Disconnect 하는 문제 문의드립니다. 째즈토끼 1921 2010/06/15
61566         Re:Re:Indy10 의 IdTCPServer에서 Disconnect 하는 문제 문의드립니다. IKG님 2122 2010/06/16
61570             Re:Re:Re:Indy10 의 IdTCPServer에서 Disconnect 하는 문제 문의드립니다. IKG님 1905 2010/06/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.