본문으로 바로가기
728x90
반응형

 MFC에서 시리얼 통신을 사용하다보면 한 패킷이 분명한데 두번 들어오늘 경우를 볼 수 있다. 이는 뭐 비단 MFC 뿐만이 아니라 비동기인 시리얼 통신에서 발생하는 문제로 아마 어떤 프로그램으로 하여도 마찬가지일 것이다.

 여튼 난 MFC로 GUI를 만들고 처리하기 때문에 MFC만 생각해서 해결해 보려고 한다. 

 일단 원론적으로는 저건 해결이 쉽지 않다. 앞서 비동기 통신 방식이기 때문이다. 상대방이 언제 보낼지 모르고 어느 정도 길이의 패킷이 정상인지 파악이 어렵다. 그러므로 근본적으로는 해결이 어렵다.

 고로 프로토콜에서 해결해야 한다. 패킷의 길이를 알고 있고 그 길이가 다 들어올 때까지를 한 패킷으로 처리해야 한다. 현재까지는 난 그렇게 해결했었다. 그러다 좀 애매한 상황이 있어서 스레드에서 해결을 볼까 해서 확인한 결과.....

 쓰레드에서 패킷 들어올 때까지 충분한 시간을 가지면 끊어지지 않을 거라고 생각하고 검색을 해보고 여러 방법으로 설정을 하였으나 내 실력으로는 정확한 구조도 모르겠고 파악도 안되고 해서 간단하게 지연을 줄까 해서 여기저기에 Sleep을 넣었다.  그러다 보니 내 생각대로 효과가 있는 곳이 있었는데....

 위의 위치에 적절히 넣어보면 개선의 효과가 분명히 있다. 물론 Sleep을 넣으면 전체 프로그램의 성능 저하를 불러일으킬 수 있고 또한 고속 통신에서는 문제가 생길 수 있지만 경우에 따라 적용해 본다면 괜찮은 성과를 낼 수도 있다.                                           

                                             

                                             

728x90
반응형