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
[46432] (질문)시리얼통신에서 쓰레드사용하기
이한진 [] 1554 읽음    2006-09-04 10:32
제가 마이컴을 주로 사용하기 때문에 마이컴 보드 테스트용 프로그램을 작성하기위치
요즘 빌더를 배우고 있습니다.
그런데, 통신관련 프로그램을 하는 중에 잘 되지 않아 이렇게 질문을 올립니다.

통신 데이타를 보내는 것은 Main Form에서 버튼을 누르면 데이타를 보내게 했기에
송신은 별 문제없이 되는데 수신이 문제입니다.

수신의 경우 하이퍼터미널이나 여타 통신 프로그램처럼 계속 수신을 받으려고 합니다.
수신된 내용을 Memo창에 표시를 하구요
그런데, 쓰레드에서 데이타가 수신되면 수신된 데이타를 읽어 표시하려고
"WaitCommEvent"을 이용하여 데이타가 수신될때만 Open 명령을 실행하려 했더니
프로그램 실행도중 "WaitCommEvent "에서 멈추더군요..
그래서 그런지 프로그램이 "WaitCommEvent"에 멈추어 있는동안은
송신도 이루어지지 않고, 어느 데이타가 수신되어야만 송신도 가능하더라구요

어떻게 해결 해야 할지 모르겟네요..
데이타의 수신을 항시 확인하면서 송신이나 다른 작업을 할수 잇는 방법은 없을까요..
쓰레드에서 수신되 데이타를 읽어와서 확인하는 방법말고
이벤트나 인터럽트같은 것을 사용하는 방법은 없는것인가요?

보통 마이컴의 경우 데이타가 수신되면 인터럽트가 발생하여 메인 프로그램과는 별도록
제어할 수 있잖아요..그렇게 하고 싶습니다..
많은 고수님들의 답변 부탁드립니다.

*------ apicom.cpp 내용----
/* 통신 Port로 부터 Signal이 들어오는지를 감시 한다.                       */
bool WaitRxEvent(int Port)
{
    DWORD dwEvtMask = 0;
    ::WaitCommEvent(m_hCommPort[Port], &dwEvtMask, NULL);
    if ( (dwEvtMask & EV_RXCHAR) == EV_RXCHAR )
        return true;
    else
        return false;
}
*------ rs232Thred.cpp 내용 ----
void __fastcall RS232Thread::Execute()
{
    char inbuff;

    // 테이타 수신 확인
    while( WaitRxEvent(th_Port) )
    {
    //데이타가 수신되면 다음 명령을 실행한다.
        // serial data Read
        bool kk = COM_Read(th_Port, &inbuff, 1);
        if( kk )
        {
            MainForm->Memo2->Text = inbuff;
        }
        Sleep(1);           
    }               
}

+ -

관련 글 리스트
46432 (질문)시리얼통신에서 쓰레드사용하기 이한진 1554 2006/09/04
46435     Re:(질문)시리얼통신에서 쓰레드사용하기 ComPort 2082 2006/09/04
46433     Re:(질문)시리얼통신에서 쓰레드사용하기 이돈진 1271 2006/09/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.