다음은 문제입니다. 직렬로 장치로 보내고받을 수 있어야합니다. 이것은 멀티 스레드 방식으로 수행되어야합니다. 다음과 같은 흐름은 다음과 같습니다 장치에 대한생산자/소비자가 연속적으로 장치를 사용하는 경우
기다립니다 내게 뭔가를 보내 - 장치 나에게 무언가, 프로세스 메시지를 보내는 경우 또는 유휴 경우, 다음 장치와 온라인 있는지 확인하기 위해 상태를 조회
, 인정 필요에 따라 다른 명령을 수행하도록 장치에 지시하십시오.
지금은 수신 스레드와 전송 스레드가 있습니다. 수신 스레드에는 1 바이트 동안 ReadFile (...)을 통해 직렬 포트를 계속 점검하는 while 루프가 있습니다. 바이트가있는 경우 버퍼를 작성한 다음 데이터를 구문 분석하여 나에게 전송 된 데이터를 확인합니다.
송신 스레드는 읽기 스레드에 의해 정의 된 다음 명령을 취해 WriteFile을 통해 동일한 COM 포트로 보냅니다. 핵심은 자신과 장치 사이에 수신/전송 관계가 있다는 것입니다.
내 질문은 여기에 중첩 된 생산자/소비자 모델이 있습니까? 수신 스레드가 장치에서 소비되고 송신 스레드가 장치로 생성되는 경우 스레드는 본질적으로 말을해야 동기화됩니다. 맞습니까? 내 노력을 효율적으로 동기화하고 장치와 빠르게 대화하는 가장 좋은 방법은 무엇입니까? 참고 : TThreads가 있고 중요한 섹션과 뮤텍스를 사용할 수있는 C++ Builder 5를 사용하고 있습니다.
편집 : 폴링을 사용하고 있기 때문에 더 잘 작동한다면 WaitCommEvent도 사용할 수 있습니다.
그렇지만 읽는 중 장치가 쓰여지지 않도록 장치에 대한 액세스를 어떻게 동기화합니까? 글로벌 플래그? –
그렇게해야한다는 것이 확실합니까? 그렇다면 세마포어를 사용하여 읽기/쓰기 작업을 동기화 할 수 있습니다. 이 http://stackoverflow.com/questions/1488712/is-it-safe-to-read-and-write-to-a-serial-port-at-the-same-time-via- 다를 수 있습니다. 도움이됩니다. – Duck