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

C++빌더 Q&A
C++Builder Programming Q&A
[72952] Re:Comport RX 질문드려요
스머팩트 [lego2000] 3799 읽음    2015-09-04 15:46

수신데이터가 5초동안 없으면 에러로 처리하고 싶다는 말씀이신듯 합니다.
구체적인 시퀀스 프로토콜을 모르는 상태라서 제가 적당한 방법을 제시한건지 모르겠네요.

------------------------
1. Timer를 이용하는 방법
------------------------

   1) 타이머를 1초 주기로 이벤트가 발생하도록 초기화 합니다.(꼭 1초가 아니어도 되겠죠)
   2) 데이터가 수신되면 수신된 시간을 변수에 저장 합니다.
   3) 타이머 이벤트가 발생했을 때
      - 지금이 에러를 처리해야 하는 상황인지와
      - 마지막 수신시간과 지금 시간을 비교해 5초가 넘었으면 에러처리루틴 호출 합니다.

------------------------
2. Thread를 이용한 방법
------------------------

   0) 사용자 메시지 WM_RX_ERROR를 정의하고 이벤트 핸들러(에러처리 함수)를 구현하고 등록 합니다.
       (사용자 메시지 핸들러 정의 도움말을 참조하세요)
   1) Thread를 생성합니다.
      - Thread는 1초를 Sleep 해가며 루프를 돕니다.(Child-Thread)
   2) 데이터가 수신되면 수신된 시간을 설정 합니다.(Main-Process가 시간을 기록)
   3) Thread가 Sleep에서 깨어나면(Child-Thread)
      - 지금이 에러를 처리해야 하는 상황인지와
      - 마지막 수신시간과 지금 시간을 비교해 5초가 넘었으면
         Main-Process에 WM_RX_ERROR(User가 정의한Message)를 PostMessage()로 보냅니다.

   참고1) 시간변수와 같이 Main-Process와 Child-Thread가 동시 접근 할 가능성이 있는 변수들은
              Mutex를 사용해 동시접근을 막아야 겠죠
   참고2) WM_RX_ERROR를 정의하고 PostMessage로 에러를 발생 시켜,
              Main-Process가 에러를 처리하게하는 이유는
      - GDI나 쓰레드에 안전하지 않은 VCL을 보호하기 위함 입니다.
      - 물론 Synchronize()와 같은 함수로 처리할 수도 있겠으나 저는 PostMessage를 선호 합니다.

대충 봐도 Timer를 이용하는 방법이 쉬워 보입니다.
빨리 구현해 보고 싶으시다면 Timer를 사용하시고, 좀더 견고한(?) 프로그램을 만들고 싶다면 Thread를 사용하기 바랍니다.
Thread를 사용하는 방법은 여러통신에 자주 사용될 뿐만 아니라 Unix와 Windows를 가리지 않고 사용되고 있습니다.
저는 Timer보다는 Thread를 선호 합니다.


[마지막으로]
1. 통신이 단방향인지, 양방향인지 그리고 양방향 동기식/비동기식에 따라서 구현이 다소 달라질 수 있습니다.
2. RS232인터페이스를 VCL을 사용한것으로 간주했기 때문에, 데이터 수신시 이벤트가 발생 한다고 가정했습니다.
3. 짧은 설명과 간단한 구현을 위해 극대화된 효율성과 종료시 처리해야 할 문제는 생략했습니다.

도움이 되셨길 바라며....


쿼드콥터헬기 님이 쓰신 글 :
: 만약 com1에서 5초 이내로 Rx을 받지 못하면 에러처리를 해야되는데 어떤식으로 해야될지 감이 안옵니다.
: 빠른 답변 부탁드립니다.
:

+ -

관련 글 리스트
72950 Comport RX 질문드려요 쿼드콥터헬기 3660 2015/09/04
72952     Re:Comport RX 질문드려요 스머팩트 3799 2015/09/04
72953         Re:Re:Comport RX 질문드려요 쿼드콥터헬기 3968 2015/09/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.