Q&A

  • GetTickCount를 이용하려 했는데 문제가 있어서요...
지금 서버에서 도는 프로그램을 만들고 있습니다.

소켓을 이용해서 정보를 보내고 또 정보를 받아서 해당 데이터를 처리하는 일종의 데몬 프로그램인데요

이 프로그램이 피씨를 재부팅 하지 않는 한은 계속 실행되어져야 하는 프로그램입니다.

그런데 소켓통신을 할 때 GetTickCount를 이용해서 사용을 했는데

소켓이 끊어지는 문제가 발생했습니다..

GetTickCount로 시간을 비교할 때 먼저 번의 시간을 변수에 넣는데.. 그 변수를 dWord로 했습니다..

그런데 문제는 49.7일이 지나면 변수에 더 이상 값을 넣지를 못하더라구요  (값이 너무 커져서..)

tick := GetTickCount;
while (GetTickCount - tick < 5000) and (not ClientSocket.Socket.Connected) do begin
       application.ProcessMessages;
       Sleep(1);
end;

이런 식으로 사용을 했는데 While 문 안으로 들어가지지를 않더라구요..

여기 저기 뒤져봤는데 ..  딱히 괜찮은 걸 찾지 못했습니다.
고수님들의 도움 바랍니다..

1  COMMENTS
  • Profile
    권태훈 2006.12.07 22:54
    질문상 이해 안되는 부분이있는데요,

    코드를 보면 소켓이 끊어지면 조건문을 타지 않는데,

    말씀하신대로라면 소켓이 끊어지는 문제가 생겨서 조건을 안탄건지

    49.7일 지나고 계산이 잘못되서 조건을 안타고, 그 이유로 소켓이 끊어진건지...

    여튼 조건문은 소켓이 끊어지면 안타니까, 소켓 연결 상태를 따로

    두는게 좋을것 같습니다.  시간 조건 안에 소켓 조건을 넣어두는게

    의미상 더 명확하겠죠.  아니면 소켓연결 조건이 글로발한 조건이고,

    시간 조건이 그 안에서 돌게 해야겠죠.

    그리고 틱카운트는 원래 그값밖에 안 들어갑니다... 넘어가면 0이 되기 때문에.

    로직상 now를 써도 될것 같은데요... ~~ ^.^