|
이영수 님이 쓰신 글 :
: 크라이언트에의 Disconnect Event Handler에 Disconnect된 시간을 저장합니다.
: 글구 스레드를 생성하고 실행합니다.
:
: void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
: TCustomWinSocket *Socket)
: {
: DisConnectTime = GetTickCount(); // DisConnect된 시간을 구한다.
:
: if(ReConnect == NULL)
: ReConnect = new TReConnect(false); //Reconnect 스레드를 생성과 동시에 실행 한다.
: }
:
:
: 스레드의 실행모듈에서는 현재 시간을 구해 Disconnec된지 5분이 지났나를 체크합니다.
: 글구 만약 5분이 지났다면 다시 Connect를 시도 합니다.
: Form1->GetDisConnectTime(); 아까 Disconnect될때 Disconnect된 시간을 가지고 있습니다.
: void __fastcall TReConnect::Execute()
: {
: int EndTime;
: while(!Terminated)
: {
: EndTime = GetTickCount();
: if(((EndTime - Form1->GetDisConnectTime())/1000) > 300)
: {
: Form1->InitialCom();
: Form1->SetDisConnectTime(EndTime);
: }
: Sleep(0);
: }
: }
:
:
: 소켓 초기화 함수
: void __fastcall TForm1::InitialCom()
: {
: ClientSocket1->Close();
: ClientSocket1->Address = xxx.xxx.xxx.xxx;
: ClientSocket1->Port = xxxx;
: ClientSocket1->Open();
:
: }
:
: 이렇게 구현을 했는데...Reconnect가 잘 구현이 안되네요.. 됐다 안됐다 하니..영..~~~
: 종잡을 수가 없습니다. 어떤 부분이 잘못된는지.. 함 봐주세요
:
:
제라툴입니다.
제 짧은 소견으로는 Terminated것이 잘못 된거 같습니다.
Terminated가 무엇을 하는 flag인지 확실이 모르겠지만 위의 소스 상에서.. 보면
Terminated가 소켓의 연결이 끊어져 있는지 아니면 정상인지를 체크하는 것같은데....
소켓을 제연결후 Terminated를 다시 연결상태(true)로 세팅이 안되는것 같습니다..
그래서 쓰레드가 종료되지 않아 발생하는 오류 인듯싶내영.. ㅡㅡ;
어디까지나 제생각입니다... 다른 고수님들의 답변을 기다려 보싶시오.. ^^
---- 아름다운 청년 제라툴 ----
|