|
시리얼통신을 사용해서 메세지를 시스템간에 송수신 (A시스템 <---> B시스템)하려고 합니다.
A와 B시스템 중에서 B시스템 해당하는 개발을 하고자 합니다.
송수신 구조는 3가지가 공존합니다.
첫째는 메세지 수신 후 바로 ACK메세지로 응답
수신쓰레드에서 메세지를 수신해서 SentEvent를 통해서 콜백함수에 수신데이터를 넘깁니다.
이벤트콜백함수에서 수신된 해당 메시지를 처리한 후에 결과를 ACK형태로 응답을 해 줍니다.
두번째는
수신쓰레드를 통해 요청메시지를 메인윈도우의 이벤트등록 함수에서 수신한 후에 새로운 메세지를 생성하여 송신후 ACK를 받고,
그리고 나서 처음요청메세지에 대한 응답을 송신합니다. 아래의 그림에서 B시스템에 해당됩니다.
[아래 참조]
A시스템 -----B 시스템
1 ---->
<---- 3 (메세지 생성)
4 ---->
<---- 2 (1번 메세지 응답)
세번째는
프로세스 안에서 타이머나 화면 버튼 등의 이벤트에 의해서 메세지를 생성하여 송신하고 응답을 수신하여 처리합니다.
이상의 3가지 형태의 송수신 통신 공존하는데 이를 구현하는 적합한 송수신 구조는 어떤게 좋을까요?
현재, 아래와 같은 문제가 있습니다.
[문제점]
1. 열려 있는 시리얼포트에 동시에 Write하는 경우가 발생합니다.
=> 크리티컬 섹션 등의 방법을 사용해서 막으면 될까요? (메인프로세스 1개, 수신쓰레드 1개입니다.)
2. 만약에, 메세지 큐같은 메세지관리 방법이 필요하다면 어떤 구조로 설계를 해야 할까요?
3. 아니면, 현재 구조에서 동기화 등의 방법을 추가/보강하여 위의 3가지 형태의 송수신을 해결할 수 있을까요?
4. 별도의 질문으로, 하나의 프로세스 안에서(추가의 쓰레드는 없는 경우) 어떤 함수가 동시에 수행되는 경우가
발생할 때, 이를 크리티컬섹션으로 막아서 한번에 한번씩(그 함수가 수행이 완료된 후에 호출되어 실행되게)만
호출이 될 수 있게 할 있나요?
질문이 좀 많고 어려울 수 있는데, 조그만 도움일지라도 도움 부탁드립니다.
감사합니다.
|