"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 상태 기계로 불완전한 데이터 검색을 수정하는 방법 (명령 및 응답)

상태 기계로 불완전한 데이터 검색을 수정하는 방법 (명령 및 응답)

2025-03-12에 게시되었습니다
검색:267

How Can a State Machine Solve the Problem of Incomplete Data Retrieval When Sending a Sequence of Commands and Waiting for Responses?

문제 이해

문제는 사용 가능한 모든 데이터를 읽고 라인으로 분리하는 readlines ()의 설계에서 비롯됩니다. 일련의 명령이 처리되면 readlines ()는 키워드를 감지하지 않기 때문에 파일의 첫 번째 부분 만 읽습니다. 그 후, 다시 호출되면 Readlines ()는 이미 사용 가능한 전체 데이터를 반복하여 False를 반환합니다.

는 일련의 명령을 효과적으로 보내고 응답을 기다리려면 상태 기계 접근 방식을 활용하는 것을 고려하십시오. 이것은 명령 및 응답의 흐름을 관리하기위한 구조적이고 신뢰할 수있는 방법을 제공하여 진행하기 전에 예상 응답을 받도록 보장합니다.

예제 구현

다음 스 니펫은 QT의 QSTATEMACHINE 및 관련 클래스를 사용하여 상태 기계 구현을 보여줍니다. q_object apppipe m_port {nullptr, qiodevice :: readwrite, this}; state s_boot {& m_mach, "s_boot"}, s_send {& m_mach, "s_send"}; FinalState S_OK {& m_mach, "s_ok"}, s_failed {& m_mach, "s_failed"}; 공공의: 프로그래머 (qobject * parent = 0) : statefulobject (부모) { ConnectSignals (); m_mach.setinitialstate (& s_boot); send (& s_boot, & m_port, "boot \ n"); 기대 (& s_boot, & m_port, "boot success", & s_send, 1000, & s_failed); send (& s_send, & m_port, ": Hullothere \ n : 00000001ff \ n"); expect (& s_send, & m_port, "로드 성공", & s_ok, 1000, & s_failed); } AppPipe & Pipe () {return m_port; } };

이 예에서 프로그래머는 상태 머신을 캡슐화하고 장치와 통신 할 수있는 인터페이스를 제공합니다. 상태 전환은 Send () 및 expect () 함수를 사용하여 정의되어 전송 명령을 처리하고 각각 예상 응답을 대기하고 대기합니다. 응답, 외부 통신 방지.

시간 초과 처리
class Programmer : public StatefulObject {
Q_OBJECT
AppPipe m_port { nullptr, QIODevice::ReadWrite, this };
State      s_boot   { &m_mach, "s_boot" },
s_send   { &m_mach, "s_send" };
FinalState s_ok     { &m_mach, "s_ok" },
s_failed { &m_mach, "s_failed" };
public:
Programmer(QObject * parent = 0) : StatefulObject(parent) {
connectSignals();
m_mach.setInitialState(&s_boot);
send  (&s_boot, &m_port, "boot\n");
expect(&s_boot, &m_port, "boot successful", &s_send, 1000, &s_failed);
send  (&s_send, &m_port, ":HULLOTHERE\n:00000001FF\n");
expect(&s_send, &m_port, "load successful", &s_ok, 1000, &s_failed);
}
AppPipe & pipe() { return m_port; }
};

비동기 특성

: 상태 머신은 기본 응용 프로그램과 동시에 실행될 수있어 차단 문제를 제거 할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3