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
[46288] Re:CPort를 이용하는 통신에서요..
공부맨 [] 1996 읽음    2006-08-24 10:08
1. CPort의 OnRxChar 이벤트는 꼭 문자 하나당 발생하지는 않습니다.
함수 원형을 봐도 알 수 있듯이 void __fastcall ComPort1RxChar(TObject *Sender, int Count)
Count 변수에 현재 버퍼 싸이즈가 넘어 옵니다.
BYTE Buff[MAX_BUFF_SIZE];
ComPort1->Read(Buff, Count);
와 같은 형식으로 사용하시면 되겠죠.

2. 제가 EventChar 속성을 사용해보지 않아서 확실히 모르겠습니다. Help파일상에는 EventChar에 설정된 값이 들어왔을때 OnRxFlag 와 OnRxChar 이벤트가 발생된다고 나와 있긴 합니다만...

3. CPort 소스를 다 뜯어보지는 않았지만, 이벤트가 끝난 후 아직 버퍼에 데이터들이 남아있으면 그때 다시 이벤트를 발생 시키는 게 아닌가 합니다.
실제로 테스트 해봐도 알 수 있습니다. 간단한 송/수신용 프로그램을 각각 만들어서 한 20바이트정도 전송해보면 OnRxChar가 몇번에 걸쳐서 발생됩니다. (컴터에 따라 8바이트로 끊어져오기도하고 어떤컴은 14바이트단위로 오기도 하고..대중없습니다. 윈도우 맘입니다.) 각각 발생된 OnRxChar이벤트의 Count변수를 확인해보시면 될겁니다.
적어도 CPort에서 별다른 설정 변경 안한 상태에서는, OnRxChar루틴 한참 동작하는 중간에 다시 이벤트가 떠서 OnRxChar로 진입하는건 아직 못 봤습니다. 예전에 OnRxChar이벤트 함수 내부에 왠만한 동작 다 때려 박아서 코딩한 적도 있는데(프로토콜 파싱하고 ListView에 백여건정도 데이터 표출하고 DB에 업데이트하고 -_-), 컴터가 버벅대면 버벅댔지 동작흐름상에 문제가 생긴적은 없는것 같네요.



흑태자 님이 쓰신 글 :
: 현재 제가 시리얼 포트가 없는 노트북에서 일단 포트가 있다는 가정하에 프로그램을 작성하고
: 그 와중에 생길수 있는 문제들을 생각하다 보니 궁금한게 자꾸 많아지는데요..
:
: 예전에 비주얼 베이직에서 조이스틱을 directX를 이용하여 제어할때 조금 고생했던 부분이
: 조이스틱이 움직이면 그에 대한 이벤트가 계속해서 중복으로 발생하는 문제가 생겼습니다
: 그러니까 한번 불려진 이벤트가 아직 그 이벤트를 처리하지 못했음에도 계속해서 발생하는 문제가 있었는데..
:
: 혹시 CPort에서도 그와 같은 일이 발생하는지 궁금합니다. 그러니까..
: 포트로 연속된 데이터가 계속해서 들어오고 있다고 가정을 하고..
: 그 데이터가 입력 버퍼에 쌓인다고 가정할 때
:
: OnRxChar의 경우 문자 하나가 입력될때마다 이벤트가 발생이 되는 것으로 알고 있습니다
: 그렇다면 만약 송신 측에서 "Hello"라는 문자열을 보낸다면 각각의 문자열마다 이벤트가 발생하겠죠?
: 프로퍼티를 보니 만약 비주얼 베이직과 비슷하다면 EventChar가 현재 #0으로 되어 있는데 이걸 조절해서
: 입력버퍼에 입력된 문자열의 개수가 몇개가 되면 이벤트가 발생되도록 만드는 프로퍼티 같습니다. 맞는지??
:
: 그렇다면.. 만약 EventChar를 #3 정도로 해서 문자 3개가 들어오면 이벤트를 발생시켜라..라고 했다고 하죠.
: 그럼 "Hello"에서 Hel 까지 입력되었을때 이벤트가 발생이 될겁니다.
: 이때 이벤트 프로시저에서 많은 일을 하고.. 그러니까 문자를 버퍼에 쌓고.. 그걸 검사해서 또다른 일을 수행하고..
: 아뭏든 많은 일이 일어난다고 가정을 했을때, 이때도 입력 버퍼에는 계속해서 문자가 들어올텐데..
: 만약 한번 이벤트가 발생되어 프로시저를 수행하고 있는 와중에 입력 버퍼에 또 데이터가 찼다면..
: 중복해서 이벤트가 발생할 수 있는건가요?
:
: 이벤트가 발생하지 못한다면 버퍼에 입력된 값은 살아있겠지만 그럼 언제 다시 이벤트가 발생해서 이 값을 읽어오게 되나요?

+ -

관련 글 리스트
46282 CPort를 이용하는 통신에서요.. 흑태자 1194 2006/08/23
46288     Re:CPort를 이용하는 통신에서요.. 공부맨 1996 2006/08/24
46287     Re:CPort를 이용하는 통신에서요..[추가질문] 흑태자 1504 2006/08/24
46315         Re:Re:CPort를 이용하는 통신에서요..[추가질문] 이돈진 1193 2006/08/25
46316             Re:Re:Re:CPort를 이용하는 통신에서요..[추가질문] 무식한흑태자-ㅁ- 1239 2006/08/25
46317                 Re:Re:Re:Re:CPort를 이용하는 통신에서요..[추가질문] 이돈진 1198 2006/08/25
46319                     감사합니다 무식한흑태자-ㅁ- 970 2006/08/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.