En su escenario, un hilo responde a un método de lectura/escritura de bloqueo, esperando hasta que detecte una palabra clave o tiempos usando WaitForKeyword (). Desafortunadamente, cuando ReadLines () se utiliza para probar la aplicación, solo se obtiene una pequeña porción del archivo. Además, ReadLines devuelve inmediatamente FALSO durante la segunda iteración sin esperar el tiempo de espera.
El problema se deriva del diseño de readlines (), que lee todos los datos disponibles y lo separa en líneas. Cuando se procesa una secuencia de comandos, ReadLines () solo lee la primera parte del archivo porque no detecta la palabra clave. Posteriormente, cuando se llama nuevamente, ReadLines () devuelve False, ya que ya ha iterado sobre todos los datos disponibles.
para enviar efectivamente una secuencia de comandos y esperar sus respuestas, considere utilizar un enfoque de máquina estatal. Esto proporciona un método estructurado y confiable para administrar el flujo de comandos y respuestas, asegurando que la respuesta esperada se reciba antes de continuar.
El siguiente fragmento demuestra una implementación de la máquina de estado utilizando las clases de QtMachine y Relacion Q_Object AppPipe m_port {nullPtr, qioDevice :: readwrite, this}; Estado 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"}; público: Programador (QObject * Parent = 0): StatefulObject (Parent) { ConnectSignals (); m_mach.setinitialState (& s_boot); enviar (& s_boot, & m_port, "boot \ n"); Espere (& s_boot, & m_port, "arranque exitoso", & s_send, 1000 y s_failed); enviar (& s_send, & m_port, ": Hullothere \ n: 00000001ff \ n"); Espere (& s_send, & m_port, "cargar exitoso", & s_ok, 1000 y s_failed); } Apppipe & pipe () {return m_port; } };
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; } };
de este enfoque
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3