|
^^
음.. 저의 짧은 소견으로 말씀을 드립니다.
소스가 전체가 나온게 아니라서 나머지 부분은 제가 상상을 해야하네여 ^^
구현하고자 하시는게 Client 접속프로그램인데.. Client가 접속을 못하면
5분후에 스레드를 이용해서 다시 Connect만을 시도하는 건가여 ?
아님. 스레드 내에서 접속후 어떠한 명령을 수행하는건가여?
만약 스레드가 하는 역할이 다시 접속해주는 역할만 하는 것이라면..
Timer를 사용하시는게 좋을 듯 하네여.
Timer의 Interval을 5분
Timer1->Enabled = false; 로 설정해놓고...
//---------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if( ClientSocket1->Active == false ) {
Form1->InitialCom();
Form1->SetDisConnectTime(EndTime);
}
}
//---------------------------------------------
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
Timer1->Enabled = false;
}
//---------------------------------------------
void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Timer1->Enabled = true;
}
//---------------------------------------------
- -; 이렇게 하면 되지않을까 싶네여.. 조금 무식한가?
그리고, 아래의 스레드에서 DisConnect 될때는 정상적으로
스레드에서 연결을 시도하지만..
정상적으로 Connect됐을때도 접속을 시도하지않나요..
Connect가되면 스레드가 종료되는 부분이 없네여..??
부분소스라서 그런가 ? 아님.. Connect 가 되어있을때도
계속 스레드가 돌면서 연결을 시도하는건가여 ?
음.. 모르겠네여 요것만 보구선..
제가 질문을 잘못이해했다면.. 다른 고수분의 답변을
기다려보세요.. ^^
이영수 님이 쓰신 글 :
: 크라이언트에의 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가 잘 구현이 안되네요.. 됐다 안됐다 하니..영..~~~
: 종잡을 수가 없습니다. 어떤 부분이 잘못된는지.. 함 봐주세요
:
:
|