일련의 명령을 보내고 응답을 기다리는 중
직렬 포트를 통한 통신에서는 종종 일련의 명령을 보내고 응답을 기다려야 합니다. 각 명령. 이는 특히 통신 중인 장치가 명령을 처리하는 데 시간이 걸리는 경우 어려울 수 있습니다. waitForReadyRead()와 같은 차단 함수는 응답을 기다리는 동안 프로그램을 멈출 수 있습니다.
차단 함수의 문제
발생한 문제는 readLines( )는 특정 시간 제한 내에 예상 키워드를 찾지 못하면 false를 반환합니다. 이는 시간 초과가 만료되기 전에 장치가 응답의 작은 부분만 보낼 때 발생합니다.
비차단 솔루션
이 문제를 극복하려면 다음을 사용할 수 있습니다. 상태 머신으로 구현된 보다 비동기적인 접근 방식입니다. 상태 머신을 사용하면 통신 프로토콜에 대해 다양한 상태를 정의하고 특정 이벤트에 따라 이러한 상태 간에 전환할 수 있습니다.
다음 상태 머신을 고려하세요.
Qt의 State Machine Framework를 사용하여 상태 머신을 생성하고 이러한 상태를 정의할 수 있습니다. send(), Expect() 및 Delay() 함수를 사용하면 명령을 보내고 특정 응답을 기다리며 전환을 지연할 수 있습니다.
구현 예
다음은 상태 머신 구현의 예입니다.
class Programmer : public StatefulObject { public: Programmer(QObject *parent = 0) : StatefulObject(parent) { ... send(&s_boot, &serial, "boot\n"); expect(&s_boot, &serial, "boot successful", &s_send, 1000, &s_failed); send(&s_send, &serial, ":HULLOTHERE\n:00000001FF\n"); expect(&s_send, &serial, "load successful", &s_ok, 1000, &s_failed); } ... };
상태 사용의 이점 머신
상태 머신을 사용하면 여러 가지 이점을 얻을 수 있습니다.
위 내용은 일련의 직렬 명령을 비동기식으로 보내고 효과적으로 응답을 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!