Qt应用程序界面冻结

时间:2017-11-21 13:24:49

标签: c++ visual-studio qt exception qtgui

我的嵌入式应用程序遇到了一些问题。这是一个包含QTimeEdit的页面,每秒计算一次,一些复选框和一些QLineEdit每秒刷新一次。

经过几分钟的工作后,我看到界面冻结,即使应用程序仍在运行。如果尝试按下按钮或复选框,则会显示访问冲突消息:

  

异常'访问冲突'(14):Thread-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,则不会发生冻结,但我不明白为什么。

1 个答案:

答案 0 :(得分:0)

您应该将计时器移动到主窗口类中,将传感器处理程序保留在分离的线程中。

传感器处理程序应该:

  • 存储数据
  • 发出"数据就绪"发信号到窗口

然后主窗口中的计时器每秒都会:

  • 从传感器处理程序中读取数据
  • 更新GUI

(确保使用线程安全对象或管理关键部分)