Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[10561] 질문] 이 함수에 논리적인 버그좀 찾아주세요~~
피터팬 [] 860 읽음    2006-03-15 11:19
아래 함수는 지속적으로 통신라인을 체크해서 통신에 문제가 발생하는 문자 메세지를 발생하는 함수입니다.
그런데 가끔 통신이 불량해도
문자메세지발송함수실행("통신라인 에러 발생 !!");        
이 함수가 실행되지 않는것 같습니다.
혹시 아래의 함수중 무엇인가가 틀린 부분이 있을지요?.
저는 도무지 찾을수가 없군요... 모두 정상적인것 같은데.....
고수님들 버그한번 찾아봐 주세요....
논리상에 버그가 있을까요????.


   
전역으로 설정되있는 변수들...

       LastSendRecvOkTime: TDateTime; // 마지막으로 장비와 정상적인 통신을 했던 시간. ..
       LastSendRecvOkTimeReadCho:integer;// 이시간(초)만틈 통신이 되지 않으면 이벤트 발생 .. 0 이면 무시됨...
       IsSendRecvState:integer;// 지금 장비와의 통신상태  0=초기화  1=정상 통신중  2=통신되지 않는중
       timeout1:bool;
       chkLastTImeInterVal,IsTime,cho:Double; // 임시변수들..


       LastSendRecvOkTimeReadCho := 5; // 5초로 설정..통신이 되다가 않될경우 5초간 통신이 않되면 문자메세지 발송.

       result ==>  1 이면 정상적인 통신상태  , 1이 아니면 통신 불량 -실시간으로 result 값을 계속 체크중이다..


주기적으로 호출하는 함수 내부 로직...
==================================================================
    result  :=톨신상태체크함수(); // 1 이면 정상적인 통신상태  , 1이 아니면 통신 불량
    if result = 1 then begin
         LastSendRecvOkTime :=now;
         if IsSendRecvState = 2 then begin // 통신되지 않다가 다시 통신 되었으면...
           IsSendRecvState := 1;
           문자메세지발송함수실행("통신라인복구됨");
         end else
         if IsSendRecvState = 0 then begin  // 한번도 통신된적이 없었다..
           IsSendRecvState := 1;
         end;
      end else begin
         if (LastSendRecvOkTimeReadCho >0) and(LastSendRecvOkTime >0) and (IsSendRecvState <>2)  then begin // 통신 잘되다가 않된경우가 발생하면..
          IsTime :=now;
          if IsTime  >= LastSendRecvOkTime then begin //
            chkLastTImeInterVal:= IsTime-LastSendRecvOkTime; // 지금 시간에서 마지막으로 통신이 잘되던 시간을 빼서 경과시간을 구한다..
            timeout1:=false;
          end else begin
            chkLastTImeInterVal := LastSendRecvOkTime -IsTime;  // 혹시라도 지금시간이 마지막저장된시간보다 작으면 무조건 시간초과로 인식하게함
            timeout1:=true;
          end;
          cho :=Trunc(((chkLastTImeInterVal)*24*60*60)); // 마지막 데이타수신후에 시간경과된 시간을 초로 환산한다.. 혹시 이부분이 문제가??.
          if (cho >=LastSendRecvOkTimeReadCho) or timeout1 then begin
             IsSendRecvState :=2;
             문자메세지발송함수실행("통신라인 에러 발생 !!");            
          end;
         end;
    end;
=============================================================

+ -

관련 글 리스트
10561 질문] 이 함수에 논리적인 버그좀 찾아주세요~~ 피터팬 860 2006/03/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.