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
[17816] Re:시리얼통신에서요(스레드 부분)....
하느리 [handebug] 1943 읽음    2002-04-21 05:07
제 생각에는 Sleep을 쓰지 말았으면 합니다. 이거시 시스템 혼자 잡아먹어서리...
시리얼 통신이라면 현재 read buff에 몇 바이트가 들어 왔는지 확인 할 수 있을 거에여. 사용하시는 컴포넌트를 잘 뒤지다 보면 그런 게 나올 겁니다. 그걸 이용해서 이런 함수를 하나 만들면 어떨지...

이 예는 pcomm library를 사용할 경우에 제가 만든 것입니다.
//---------------------------------------------------------------------------
// 지정된 통신포트의 버퍼를 확인하여 지정된 문자갯수가 들어와 있는지 점검.
// int   port  : 입력포트
// int   count : 입력받을 문자수
// DWORD stop  : 최대대기 시간
//---------------------------------------------------------------------------
bool waitCommData (int port, int count, DWORD stop)
{
    DWORD   start;

    start = GetTickCount ();
    while ( GetTickCount () - start < stop )
    {
        if ( sio_iqueue (port) >= count )   return true;
        Application->ProcessMessages ();
    }

    return false;
}
//---------------------------------------------------------------------------



blue_sky 님이 쓰신 글 :
: 안녕하세요...
: 스레드에 대한 초보적인 질문 몇가지만 하겠습니다.
: 다름이 아니라...
: 시리얼 통신에서 스레드에서 데이터를 보내고 받는 부분을 구현했는데요.
: 예를 들어
:
: 전송할 데이터..
: for(int i=1; i<5; i++)
:   SetEvent(hEvent[i]);
:
: 스레드...
: CommProc()
: {
:   while(true)
:   {
:      WaitForSingleObject(hEvent1,INFINITE);
:
:      Comm->WriteFile(data, size);
:      Sleep(300);
:      nSize = Comm->ReadFile(hComm,buf,nHeaderSize,dwRead,NULL);
:      size = nSize;
:      if(nSize < nHeaderSize)
:      {
:        for(int i=0; (size >= nHeaderSize) && (nReadCount < 30); i++)
:        {
:           nSize = Comm->ReadFile(hComm,buf+size,nHeaderSize-nSize,NULL);
:           size += nSize;
:           nReadCount++;
:           Sleep(100);
:        }
:      }
:         //Recv Data Process...
:   }
: }
:
: 이렇게 하구 시리얼 포트를 약5개를 열었습니다.
: 근데요 만약 1개만 통신하구 4개가 통신에서 Receive데이터를 받지 못하는 상황이 되면 통신이 되고있는 1개의 데이터 전송이 매우 늦어집니다.(1개 보내고 다음데이터 전송까지의 시간이...)
: 이일을 어떻게 처리해야 하는지 감이 오질않네요...
: 스레드들이 하나의 스레드에서 Sleep()을 하면 다른 4개의 스레드들도 멈춰버리나요...
: 아님 Sleep시간동안 다른 스레드들이 일을 시작하나요.
: 고수님들의 한마디를 기다립니다....

+ -

관련 글 리스트
17806 시리얼통신에서요(스레드 부분).... blue_sky 1754 2002/04/20
17817     Re:시리얼통신에서요(스레드 부분).... 꼴(이성렬) 1679 2002/04/21
17816     Re:시리얼통신에서요(스레드 부분).... 하느리 1943 2002/04/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.