[질문] VC++ 시리얼통신에 대한 질문입니다.
슬기
아래 부분은 시리얼통신에 일부 소스입니다. (전체 소스는 양이 많아서.. ㅡㅡa)memset(buff, 0, BUFF_SIZE);
WaitCommEvent(pComm-hComm, &dwEvent, NULL);
//
// EV_RXCHAR 수신만 적용.
if((dwEvent & EV_RXCHAR) == EV_RXCHAR)
{
do
{
ReadFile(pComm-hComm, buff, BUFF_SIZE, &dwLength, &pComm-m_osRead);
if(BUFF_SIZE - pComm-m_QueueRead.GetSize() (int)dwLength)
{
for( DWORD i = 0; i dwLength; i++ )
{
pComm-m_QueueRead.PutByte(buff[i]);//큐 버퍼에 들어온 데이터 넣기
}
}
}while(dwLength);
// WaitCommEvent() 부분이 안멈추고 두번 돌게 되니까 이부분을 다시 호출함
// 물론 제어문을 통한 해결 방법이 있지만
// 원천적인 문제인 WaitCommEvent()의 두번 호출을 해결 해야 할것 같아서요..
::PostMessage(hCommWnd, WM_COMM_READ, 0, 0 );
}
Sleep(0);
빨간색 부분은 Com 포트로 부터 이벤트를 대기하는 함수입니다.
위 소스는 쓰레드내에 있는 일부 소스로써 Com 포트를 통해 이벤트가 발생하면 아래 소스들을 실행을 하는데...
문제는 분명 한번 보냈는데.. WaitCommEvent는이벤트가 두번 발생하여 불필요한 루프가 한번더 돌게 됩니다.
파란색 부분이 결국 두번이 호출되어 결과가 이상하게 나오는거죠..
1바이트 전송은 문제가 없으나 2바이트에선 두번 돌게 됩니다. 정확히 2바이트 이상에선 무조건 두번입니다.
뭔가 문제일까요.. 원래 그런건가요?
-
심플이
진수다님 저도 이소스로 실행을 하였는데... 저런 증상이 나타나더라구요.. ^^
-
꼬붕
제 주변 사람도 자바하면 절 떠오른다고 하더군요.. ^-^ 하도 제가 자바 자바 자바 하니까 그렇게 인식이 되나봐요.. 자바 잘하지도 못하는데.. ^^
-
이퓨리한은지
ㅋㅋㅋ함께 하는분을 보긴 봤는데.. 저는 수다님 전공이 자바인줄 알았어요^^
2가지 다 하면 좋죠 ㅠㅠ -
알찬해
ㅎㅎㅎ 회사서는 C++인데.. 자바란 녀셕을 좋아해서 공부삼아서 하는겁니다 ㅎㅎ 사실 지금 무쟈게 헷갈려요.. C++과 자바는 함께 할수 없는건가 쩝..
-
인1형녀
수다님앙~~
궁금한게 있는데 무슨 언어 개발자세요?? --;;
질문이 자바 있고 c++ 있어서 헷갈립니다 -0-