シナリオでは、スレッドはブロッキング読み取り/書き込みメソッドに応答し、キーワードが検出されるまで待機します。または、waitForKeyword() を使用してタイムアウトします。残念ながら、readLines() を使用してアプリをテストすると、ファイルのごく一部しか取得されません。さらに、readLines は 2 回目の反復中にタイムアウトを待たずに即座に false を返します。
この問題は、利用可能なすべてのデータを読み取り、データを分割する readLines() の設計に起因します。線。一連のコマンドが処理されているとき、readLines() はキーワードを検出しないため、ファイルの最初の部分のみを読み取ります。その後、再度呼び出されると、readLines() は利用可能なデータ全体をすでに反復処理しているため false を返します。
一連のコマンドを効果的に送信し、そのコマンドの受信を待つため応答するには、ステート マシン アプローチの利用を検討してください。これにより、コマンドと応答のフローを管理するための構造化された信頼性の高い方法が提供され、続行する前に期待される応答が確実に受信されるようになります。
次のスニペットは、Qt を使用したステート マシンの実装を示しています。 QStateMachine および関連クラス:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
この例では、プログラマーはステート マシンをカプセル化し、ステート マシンと通信するためのインターフェイスを提供します。 デバイス。状態遷移は、send() 関数と Expect() 関数を使用して定義され、それぞれコマンドの送信と予期される応答の待機を処理します。
ステート マシンを使用すると、次のような利点があります。
以上がステート マシンは、一連のコマンドを送信して応答を待つときに不完全なデータ取得の問題をどのように解決できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。