|
Timer 를 끄고 작업해보세요.
일반적으로 Timer 가 걸려 오면 다음 타이머가 오지 않습니다만, 꼭 그렇지가 않습니다.
가령 ClientSocketPC 의 어느것이 active = true 에 연결을 하였을때 연결 event 등 각종 상태를
Status bar 에 출력하는 event 처리 부분이 있었고, 거기에 message 처리 부분이 있었다면
timer 가 올 가능성이 있습니다.
이런 부분이 없는 상황에서 작성하여 잘돌다.. 후에 이런 부분을 추가할 경우 예상치 못한 오류가 날때가 있죠.
그래서 일반적으로 timer 가 오면 해당 timer 를 끄고 (꼭 시간을 정확하게 측정하여야 하는 경우 빼고는)
timer 를 끄고 작업을 하는것이 일반적입니다.
코드 전부를 볼수 없어서 정확한 오류의 원인으로 단정할 수는 없습니다만..
void __fastcall TDataModuleComm::PCCheckTimerTimer(TObject *Sender)
{
PCCheckTimer->Enabled = false; << 여기
for (int i = 0; i < 9t; ++i){
if (IPAdd[i]!="") ClientSocketPC[i]->Host = IPAdd[i];
if (ClientSocketPC[i]->Host != "" && ClientSocketPC[i]->Socket->Connected == false)
ClientSocketPC[i]->Active = true;
}
PCCheckTimer->Enabled = true; << 여기
}
궁금이 님이 쓰신 글 :
: 서버soket과 접속이 될때까지 계속 체크하는 프로그램을 짜고있습니다.
:
: 서버soket쪽과 연결이 안되면 계속 ClientSocketPC[i]->Active = true; 를 하고있는데 한 5분 쯤 지나면 에러가 파바바박 계속 뜨네요
:
: ClientSocket 으로 짠 프로그램에서 1초 간격으로
:
: 9개의 ServerSocket 으로 짠 프로그램이 있는 각각의 PC 에게 접속을 요청해서 그 IP에 컴이 살이 있는지 죽었는지를 체크하는
:
: 프로그램을 작업 중 입니다
:
: ClientSocket 으로 짠 프로그램에서 Timer 를 1초 간격을 주어
: ===============================================================================================
: for (int i = 0; i < PCCnt; ++i){
: ClientSocketPC[i] = static_cast<TClientSocket *>(FindComponent("ClientSocketPC" + IntToStr(i + 1)));
: .
: .
: .
: .
: void __fastcall TDataModuleComm::PCCheckTimerTimer(TObject *Sender)
: {
: for (int i = 0; i < 9t; ++i){
: if (IPAdd[i]!="") ClientSocketPC[i]->Host = IPAdd[i];
: if (ClientSocketPC[i]->Host != "" && ClientSocketPC[i]->Socket->Connected == false)
: ClientSocketPC[i]->Active = true;
: }
: }
: ===============================================================================================
:
: 위와 같이 timer 를 사용하여 1초 간격으로 연결이 안된 컴퓨터에는 계속 ClientSocketPC[i]->Active = true;
: 를 하였습니다.
: 컴퓨터가 살아서 Connected 된곳은 문제가 없는데 serversocket과 연결이 안된 컴퓨터 때문에 프로그램 실행후
: 5분가량되면 에러가 뜨네요..
:
: 방법이 없을까요?
|