|
제 생각에는 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시간동안 다른 스레드들이 일을 시작하나요.
: 고수님들의 한마디를 기다립니다....
|