0

シリアル データを取得して表示する Qt アプリケーションがダッシュボード タイプの GUI にあります。プログラムの基本構造は次のとおりです。

EDIT SerialPort (QIODevice から継承) オブジェクトが作成され、readyRead 信号がスロットに接続されます。新しいデータが入ってくると、それは解釈され、メッセージ ハンドラーを介してプログラムを通じて送信されます。最終的に、データは GUI レイヤーに送られ、そこでユーザーに表示されます。

プログラムは Windows 7 では正常に動作しますが、Windows XP を実行している Panasonic タフブックで実行すると、プログラムは正常に起動しますが、しばらくすると GUI の更新が停止します。つまり、新しいデータが入ってきても、ユーザーがボタンをクリックするかサイズを変更するまで、GUI は再描画されないということです。この種の行動には、どのような理由が考えられるのだろうかと考えています。メインスレッドが入ってくるすべてのシリアルデータに圧倒されているのではないかと思いましたが、とにかく GUI は別のスレッドで実行されていると思います。私が間違っている?何が起こっているのかについて誰か考えがありますか?

4

1 に答える 1

0

SerialPortIO独自のスレッドにない場合は、新しいデータを待っているときにブロックされている可能性があります。私はその特定の Serial クラスを使用していませんが、一般に、データのストリームはおそらく独自のスレッドにあるはずです。

qApp->processEvents()定期的に呼び出して、プログラムに GUI をさらに更新させることができ、GUI が更新されます。

また、qDebugコードにいくつかのステートメントを追加します。特に、呼び出しの頻度が高すぎる、または十分ではないと思われる関数の先頭に記述します。

次の行を使用すると、マルチスレッド アプリケーションで何が起こっているかを簡単に追跡できます。

qDebug() << Q_FUNC_INFO;

それが役立つことを願っています。

于 2013-03-07T19:40:54.063 に答える