2017-11-21 3 views
0

私の組み込みアプリケーションにいくつか問題があります。毎秒の時間をカウントするQTimeEditと、いくつかのチェックボックスと、1秒ごとに更新されるQLineEditを含むページです。Qtアプリケーションインターフェイスフリーズ

作業が数分後に、アプリケーションがまだ実行中であっても、インターフェイスがフリーズしています。ボタンを押すか、アクセス違反のメッセージをチェックボックスしようとするが表示された場合:

例外 'アクセス違反'(14):スレッドID = 05d80002(PTH = 8af6109c)、PROC-ID = 04a90002(PPRC = 91431714) 'nmb3.exe'、VM-active = 04a90002(pprc = 91431714) 'nmb3.exe' PC = 407ea307(qtgui4.dll + 0x0005a307)RA = 40d6c82c(qtgui4.dll + 0x005dc82c)SP = 01c1b928、BVA = 00000004

例外はqtgui4.dllに関連しています。仮想メモリの飽和が発生したかどうかを確認しましたが、これはフリーズの原因となる問題ではありません。

QTimeEditの更新を避けてもフリーズは発生しませんが、その理由はわかりません。

+2

あなたのコードを共有することができますしてください? – Simon

+0

アプリケーションは、スレッド、メインウィンドウ、QWidgetで構成されています。スレッドはシグナル/スロットを使用してQWidgetと通信します。毎秒、次のアクションを実行します: 'time.start(); // QTimeはupdateTimeSignal(time)を送出します。 updateListOfSensorsSignal(sensorData)を発行します。 //センサデータで異なる行編集機器を更新する ' – Michele

+1

GUIスレッドの 'QTimeEdit'を更新していますか?他のスレッドではありませんか? –

答えて

0

メインハンドブックにタイマーを移動し、センサハンドラを分離したスレッドに保持する必要があります。

は、センサ・ハンドラが必要です。

  • ストアは、データが
  • は意志、そして、窓

メインウィンドウで、タイマー、秒ごとに「データレディ」信号を発する:

  • センサーハンドラからデータを読み取る
  • GUI

を更新(あなたはスレッドセーフなオブジェクトを使用したり、クリティカルセクションを管理していることを確認してください)