|
안녕하세요..
허접입니다..
전에, 한번 이곳에 질문을 올려, 해결한 문제인데, 그것과 비슷하지만 다른 문제점이 발생해서요..
소스를 올려드리자면, (통신 쪽만) 다음과 같습니다..
void __fastcall TRS232CRxThread::Execute()
{
DWORD dwEventMask;
DWORD dwErrorFlags;
COMSTAT CommStatus;
while(!Terminated)
{
dwEventMask = 0;
Sleep(1);
//--- 통신 버퍼의 이벤트를 기다린다
WaitCommEvent(myRs232c->hmyPort, &dwEventMask, &myRs232c->evnRead);
if(!dwEventMask) continue;
EnterCriticalSection(&myRs232c->myCriticalSection);
if(myRs232c->hmyWnd)
{
if(dwEventMask & EV_RXCHAR)
{
//------------ 수신버퍼에 데이터 문자가 수신 되었을 경우
ClearCommError(myRs232c->hmyPort, &dwErrorFlags, &CommStatus);
SendMessage(myRs232c->hmyWnd, UM_EVN_RXCHAR, CommStatus.cbInQue, 0);
}
if(dwEventMask & EV_RXFLAG) SendMessage(myRs232c->hmyWnd, UM_EVN_RXFLAG, 0, 0);
if(dwEventMask & EV_TXEMPTY) SendMessage(myRs232c->hmyWnd, UM_EVN_TXEMPTY, 0, 0);
if(dwEventMask & EV_CTS) SendMessage(myRs232c->hmyWnd, UM_EVN_CTS, 0, 0);
if(dwEventMask & EV_DSR) SendMessage(myRs232c->hmyWnd, UM_EVN_DSR, 0, 0);
if(dwEventMask & EV_RLSD) SendMessage(myRs232c->hmyWnd, UM_EVN_RLSD, 0, 0);
if(dwEventMask & EV_BREAK) SendMessage(myRs232c->hmyWnd, UM_EVN_BREAK, 0, 0);
if(dwEventMask & EV_ERR) SendMessage(myRs232c->hmyWnd, UM_EVN_ERR, 0, 0);
if(dwEventMask & EV_RING) SendMessage(myRs232c->hmyWnd, UM_EVN_RING, 0, 0);
if(dwEventMask & EV_RX80FULL) SendMessage(myRs232c->hmyWnd, UM_EVN_RX80FULL, 0, 0);
}
LeaveCriticalSection(&myRs232c->myCriticalSection);
}
}
소스의 11번째 줄에 Sleep(1) 함수가 있죠.
이 Sleep() 함수를 쓰기 전에는 프로그램을 돌리면 CPU 점유율이 100% 까지 올라가는 사태가 벌어졌습니다.
다행히도 도움을 주셔서 Sleep() 함수를 사용한 후에는 CPU 점유율이 극단적으로 치솟는 사태는 없어졌습니다.
그런데 문제는 기존에 데이터를 받아와 처리하는 부분의 속도가 1/3로 줄어들었다는 것입니다.
왜 그런지, 무엇때문에 그런지, 도통 알수가 없습니다.
왜 그런건지 알려주세요..
너무 질문이 막연한건가요? ㅠ.ㅜ
죄송합니다.
|