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
[11215] Re:[질문] CommPort262 Component 활용 문제
패패루 [peperu] 913 읽음    2001-09-18 20:01
일단, ReadStr함수는 AnsiString으로 돌려주는 함수인것 같군요..
제가 그 컴포넌트를 써보지 않아 장담은 못하겠지만, 아마 Stream이나 void*로 받을 수 있는
함수가 따로 있을겁니다.
TStream을 인자로 사용되는 함수를 찾아보시고, 만약 없으면 char*이나 void*을 인자로 읽어
드리는 함수를 한 번 찾아보시기 바랍니다.
혹시 CommPort262 컴포넌트의 ReadBuffer에 대한 포인터를 얻을 수 있다면 TStream->Write 함
수를 이용하여 버퍼의 내용을 긁어올 수도 있겠구요..
제가 그 컴포넌트를 써보지 않은 관계로 어느하나 정확한 답변은 못하겠군요.

그리고, 타임아웃 문제는.. 일단, 200ns가 아니라 200ms겠죠..
상당히 타임아웃 시간이 짧은 편이군요. 아무리 윈도우 시스템의 최대 타임 해상도가
1ms라고는 하지만, 실제 해보면 15ms정도 되는것 같습니다.
지금 처리하신 방법은 전형적인 동기식 알고리즘인데, 제 생각엔 CommPort262 컴포넌트는
비동기식 처리를 기반으로 하고 있는 느낌이 드네요..
매번 루프를 돌리면서 InputCount를 검사해보는 방식이 아니라, 포트에서 입력이 있을때
동작하는 이벤트가 있을 듯...

정 안되면 님이 하신 것 처럼 루프 돌리면서 하는게 맞겠지만.. Sleep이 걸린 동안 메인
메시지 프로시저 처리가 중단되기 때문에 별로 권장할만해 보이진 않군요..
CommPort262컴포넌트 구조를 봐야 좀 더 정확한 답변이 될텐데..

CommPort262컴포넌트가 제대로 된 컴포넌트라면, Timeout같은 프라퍼티와 그에 대응되는 이벤
트 들을 갖추고 있어야 하는거죠..

아.. 답변 괜히 쓰기 시작했나보다..
지송함다

패패루였슴다.



힘냄 님이 쓰신 글 :
: CommPort262 버전 컴포넌트로 개발중입니다...
:
: 문제점은
:      Comm 포트를 통해 데이터를 받을때 Null문자처리 입니다.
:      Null문자도 응용처리상에 유용한 데이타인 관계로 DiscardNull 옵션을
:      줄수도 없는 상태입니다.
:     
:      받는 메세지는 아래와 같은 데이터입니다.

:      M0112345678 010820171247FD50E20102030401003D0D03D7000000D410650320000367838D2
:                 ^ 바로 여기에 있는 HEX(00) 문자
:         HEX(00)문자로 인해 원해는 데이터가 분리되어 M0112345678 만 수신처리됩니다.
:         해결할 수 있는 방안을 알려주십시오...
:
:      그리고요... 아래와 같이 Comm 포트의 메세지를 기다리기 위해 While 루프를 돌렸습니다.
:      timer를 이용해 200ns 후에 타임아웃이 걸렸으면 하는데 무한루프에 걸립니다.
:      
:         commSMSPort->WriteStr("AT");
:         // 연결상태점검 메세지 응답 대기
:         timerTimeOut->Enabled=true;    <-- timer 설정은 interval 100입니다.
:         do{
:             commSMSPort->ReadStr(strTmpInputMsg,commSMSPort->InputCount());
:             strInputMsg=strInputMsg+strTmpInputMsg;
:             if(strInputMsg.AnsiPos("ERROR")!=0) chkCommPort=false;
:             Sleep(100);   <-- 이 방법 말구는 없는지요...  쓰레드로 구현해야 되나???
:         }while(strInputMsg.AnsiPos("OK")==0 && !boolSyncTimeOut && chkCommPort);
:         timerTimeOut->Enabled=false;
:
:      깔끔한 해결방법있으시면 알려 주십시오...   그럼 즐거운 하루 되시길....
:     

+ -

관련 글 리스트
11210 [질문] CommPort262 Component 활용 문제 힘냄 895 2001/09/18
11215     Re:[질문] CommPort262 Component 활용 문제 패패루 913 2001/09/18
11230         Re:Re:[질문] CommPort262 Component 활용 문제 힘냄 876 2001/09/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.