지금 서버에서 도는 프로그램을 만들고 있습니다.
소켓을 이용해서 정보를 보내고 또 정보를 받아서 해당 데이터를 처리하는 일종의 데몬 프로그램인데요
이 프로그램이 피씨를 재부팅 하지 않는 한은 계속 실행되어져야 하는 프로그램입니다.
그런데 소켓통신을 할 때 GetTickCount를 이용해서 사용을 했는데
소켓이 끊어지는 문제가 발생했습니다..
GetTickCount로 시간을 비교할 때 먼저 번의 시간을 변수에 넣는데.. 그 변수를 dWord로 했습니다..
그런데 문제는 49.7일이 지나면 변수에 더 이상 값을 넣지를 못하더라구요 (값이 너무 커져서..)
tick := GetTickCount;
while (GetTickCount - tick < 5000) and (not ClientSocket.Socket.Connected) do begin
application.ProcessMessages;
Sleep(1);
end;
이런 식으로 사용을 했는데 While 문 안으로 들어가지지를 않더라구요..
여기 저기 뒤져봤는데 .. 딱히 괜찮은 걸 찾지 못했습니다.
고수님들의 도움 바랍니다..
코드를 보면 소켓이 끊어지면 조건문을 타지 않는데,
말씀하신대로라면 소켓이 끊어지는 문제가 생겨서 조건을 안탄건지
49.7일 지나고 계산이 잘못되서 조건을 안타고, 그 이유로 소켓이 끊어진건지...
여튼 조건문은 소켓이 끊어지면 안타니까, 소켓 연결 상태를 따로
두는게 좋을것 같습니다. 시간 조건 안에 소켓 조건을 넣어두는게
의미상 더 명확하겠죠. 아니면 소켓연결 조건이 글로발한 조건이고,
시간 조건이 그 안에서 돌게 해야겠죠.
그리고 틱카운트는 원래 그값밖에 안 들어갑니다... 넘어가면 0이 되기 때문에.
로직상 now를 써도 될것 같은데요... ~~ ^.^