我在嵌入式应用程序中遇到了一些问题。这是一个包含一个QTimeEdit
的页面,该页面计算每秒的时间,一些复选框和一些QLineEdit
s,每秒刷新。
工作了几分钟后,即使应用程序仍在运行,我也会看到接口的冻结。如果尝试按下按钮或复选框,则会出现违规消息:
例外"访问违规"(14):thread-id = 05D80002(pth = 8af6109c),proc-id = 04A90002(pprc = 91431714)'nmb3.exe',vm-active',vm-active = 04a90002(pprc = 91431714)nmb3.exe'pc = 407ea307(qtgui4.dll 0x0005a307)ra = 40d6c82c(qtgui4.dll 0x005dc82c)sp = 01c1b928,bva = 0000000004
例外与qtgui4.dll
有关。我检查了是否发生了虚拟内存的饱和度,但这不是导致冻结的问题。
如果我避免更新QTimeEdit
,则不会发生冻结,但我不明白为什么。
您应该将计时器移至MainWindow类,将传感器处理程序保持在分离的线程中。
传感器处理程序应:
- 存储数据
- 向窗口发出"数据准备"信号
然后,每一秒钟,MainWindow中的计时器将:
- 阅读传感器处理程序的数据
- 更新GUI
(确保您使用的是线程安全对象或管理关键部分)