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
[38764] Re:Re:Re:Re:Re:Re:[질문]죄송합니다. 한번만 더 봐주실래요.
보거스 [kjlee1] 1037 읽음    2005-01-14 15:38
이렇게 여러번 답변 주셔서 너무 감사드립니다.

BOOL ccomm32::opencomm(int nport, DWORD dwbrate)
{
        char  port[5];
        int      n_Port[20];
        wsprintf(port, "COM%d", nport);
        n_Port[nport-1] = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL,
                                                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        중략...
}

DWORD ccomm32::readcomm(BYTE *by, int nlen)
{
        int h_Port = gethcomm();
        중략...
}

에러 해당 부분은
(40): 은
        n_Port[nport-1] = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL,
                                                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

(142): 은
        int h_Port = gethcomm();  부분이에요.

스레드는 사용하지 않구요.(사실 사용하기 좀 어렵던데요.)
타이머를 이용해서 1초 간격으로 readcomm() 호출해서 데이타가 들어왔을때만 처리하거든요.

처음에 프로그램 시작시 장비와 연결되어 있는 포트(멀티포트)를 순차적으로 OPEN하고 그 다음에는
어차피 멀티포트이기 때문에 각각 독립된 포트로서 데이타를 송,수신 하지 않습니까?  맞나요?

블럭킹 모드로 들어가지는 않는것 같구요.
gethcomm() 함수는 맨 마지막에 ( sethcomm(X) ) 한것만을 리턴할거 같은데요? 라고 말씀하셨는데
생각해보니 그럴것 같네요.

그러면 핸들을 선언할때 배열로 선언해서 어떻게 처리하면 될것 같은데
그걸 int type으로 보면 888 과 같은 숫자가 나와서요.
COM1을 Open 해서 그 포트로 데이타가 들어오면 1 이라는 숫자가 나와야 되는거 아닌가요?

WARSHIP님 이렇게 도와주셔서 감사드리구요.  
지금까지 말씀하신 방향으로 접근해보도록 하겠습니다.





WARSHIP 님이 쓰신 글 :
: 40/142 번 줄을 좀 보여주세요 ^^;
: 핸들값은 32비트 정수형이기 때문에
: 제가 말씀드린 그부분에서 에러나는거 같지는 않거든요 ^^;
: (혹시 모르니 선언을 HANDLE X,Y; 이런식으로 해보시구용 @_@);
: 그리고 전체 소스를 보지 않아서 모르겠지만
: 아래의 것들로만 유추한다면
: gethcomm() 함수는 맨 마지막에 ( sethcomm(X) ) 한것만을 리턴할거 같은데요?
: 제말은 고로..
: 동시에 여러 포트를 감시하려면 10개를 감시하려면
: 10개의 쓰레드를 돌려야 하지 않는가 입니다.
: timeout을 주지 않은 상태에서 ReadFile(~~)하게 되면
: 컴퓨터는 그상태에서 블럭킹 모드로 돌입합니다(올때까지 기다리죠, 다른것을 할 수 없습니다.)
: (timeout을 아주 짧게 잡고 루프로 돌린다는것도 좀 문제가 있죠)
: 각각 포트에 대해 감시하는 쓰레드를 붙혀주고 만약 입력이 들어올 경우에는
: 메인 쓰레드(메인 프로그램)에 통지를 해서 처리하는 방식이어야 하지 않나 생각됩니다.
:
: 사실 저도 말하면서도 이게 맞나 싶지만, 보거스님이 올려주신 소스만 가지고 판단할 때
: 맨 마지막에 sethcomm() 했던 포트만 감시할 수 있을거 같습니다.
: 저도 연구좀 해봐야겠네요 ^^;
:

+ -

관련 글 리스트
38744 [질문]포트확인? 보거스 1516 2005/01/13
38746     Re:[질문]포트확인? WARSHIP 1152 2005/01/13
38748         Re:Re:[질문]소스 한번 봐 주실래요. (포트번호는 안오는것 같거든요) 보거스 1453 2005/01/13
38757             Re:Re:Re:[질문]소스 한번 봐 주실래요. (포트번호는 안오는것 같거든요) WARSHIP 1026 2005/01/14
38760                 Re:Re:Re:Re:[질문]죄송합니다. 한번만 더 봐주실래요. 보거스 1014 2005/01/14
38762                     Re:Re:Re:Re:Re:[질문]죄송합니다. 한번만 더 봐주실래요. WARSHIP 974 2005/01/14
38764                         Re:Re:Re:Re:Re:Re:[질문]죄송합니다. 한번만 더 봐주실래요. 보거스 1037 2005/01/14
38767                             Re:Re:Re:Re:Re:Re:Re:[질문]죄송합니다. 한번만 더 봐주실래요. WARSHIP 981 2005/01/14
38768                                 Re:Re:Re:Re:Re:Re:Re:Re:[감사]정말 많이 도움되었습니다. 보거스 1053 2005/01/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.