【发布时间】:2018-05-04 23:33:48
【问题描述】:
我的嵌入式应用程序遇到了一些问题。它是一个页面,其中包含一个 QTimeEdit 每秒计算时间、一些复选框和一些 QLineEdits 每秒刷新一次。
工作几分钟后,我看到界面冻结,即使应用程序仍在运行。如果尝试按下按钮或复选框,则会出现访问冲突消息:
异常“访问冲突”(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,则不会发生冻结,但我不明白为什么。
【问题讨论】:
-
你能分享你的代码吗?
-
应用程序由线程、主窗口和QWidget组成。线程通过使用信号/槽与 QWidget 进行通信。每秒钟,它都会执行以下操作:
time.start(); //QTime emit updateTimeSignal(time); emit updateListOfSensorsSignal(sensorData); //update the different line edit instruments with sensors data -
您确定要更新 GUI 线程中的
QTimeEdit,而不是其他线程吗? -
是的,我确定。如果我将发射评论到 QTimeEdit,它会停止显示递增时间。同时我没有看到界面冻结。实际上,updateTimeSignal 是由 QtimeEdit 和不同标签组成的 QWidget 的信号
-
为了能够帮助您,我们需要您的代码来查看您的编码方式。您可能存在访问内存冲突或死锁,但如果我们没有看到您的代码,我们无法弄清楚。
标签: c++ visual-studio qt exception qtgui