- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
注意:所提供的代码只是给出了应用程序结构的概念
我有一个与外部硬件交互的 Qt 应用程序。该结构是这样的,用于与硬件接口(interface)的类继承自QObject
,并与主GUI线程类组成。假设这个类是 test.h,下面是它的示例代码:
#ifndef TEST_H
#define TEST_H
#include <QLineEdit>
#include <QString>
#include <QTimer>
#include "ui_test.h"
#define TIMEOUT 100
class TestObj;
class TestApp:public QWidget, public Ui::mTestForm
{
Q_OBJECT
public:
TestApp(QWidget* parent=0);
QTimer* mTimer;
bool mWindowClosed;
TestObj* mObj;
public slots:
void UpdateText();
void Exit();
};
class TestObj:public QObject
{
Q_OBJECT
public:
TestObj();
void RandomTest();
};
#endif
test.cpp 的代码是
#include "test.h"
TestApp::TestApp(QWidget* parent):QWidget(parent)
{
setupUi(this);
mObj = new TestObj();
mWindowClosed=false;
mLineEdit->setText("Hello");
mTimer=new QTimer();
mTimer->singleShot(1000,this,SLOT(UpdateText()));
connect(mExitButton,SIGNAL(clicked()),this, SLOT(Exit()));
}
void TestApp::UpdateText()
{
if(mWindowClosed)
{
//QApplication::processEvents();
return;
}
else
{
//QApplication::processEvents();
mObj->RandomTest();
mLineEdit->setText("Hi");
mTimer->singleShot(100,this,SLOT(UpdateText()));
}
}
void TestApp::Exit()
{
mWindowClosed=true;
}
现在考虑 TestObj
类是用于与硬件接口(interface)的类。这个类向硬件发送三个可能的命令(在实际代码中,以上只是一个示例结构),具有不同的超时时间,因此我们有一个定时器,用于向硬件发送命令(作为函数实现)。其中每一个都有一个 processEvents
条目,以识别同时对变量的任何更改。
问题是这个模块负责程序执行期间内存的稳定增长。
当我注释掉 TestApp
构造函数中的 UpdateText()
函数时,应用程序运行正常。
我的猜测是,很可能存在信号槽排队导致内存增加,因为有很多 GUI 事件正在发生。而且由于该类不是作为单独的线程实现的,而是与主 GUI 线程结合在一起。有主线程的持续更新。
有人可以建议出路吗?我无权更改设计,否则我会将接口(interface)类实现为线程。因此,如果可以按原样建议当前设计的解决方案,那将是有益的。
最佳答案
创建一个常规计时器,将其间隔设置为 100 并将其超时信号连接到UpdateText
函数将避免事件堆积。
P.S: singleShot
不需要QTimer
对象,可以直接调用QTimer::singleShot
。
关于c++ - processEvents 和内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1320781/
我有一个从 QThreads 和主线程调用的方法。此方法有时可能需要很长时间才能在循环中进行计算,因此我放置了 QCoreApplication::processEvents() ,这可以防止 GUI
注意:所提供的代码只是给出了应用程序结构的概念 我有一个与外部硬件交互的 Qt 应用程序。该结构是这样的,用于与硬件接口(interface)的类继承自QObject,并与主GUI线程类组成。假设这个
由于只有一个QCoreApplication对象,为什么从哪个线程调用QCoreApplication::processEvents()无关紧要? 毕竟,线程都共享相同的地址空间。 最佳答案 您的标题
我有几个问题。 是否可以在一个线程上初始化 QApplication 对象并在另一个线程上销毁它? 为什么 QApplication 必须在分配它的同一线程上运行? 是否可以在创建 QApplicat
我的工作时间非常重要,我对 processEvents() 的行为有疑问。当我调用 processEvents() 时,它是否在单独的线程/进程上运行,以便在执行更多代码时它可能仍在运行? 如果不是,
QThread 文档建议了两种使代码在单独的线程中运行的方法。如果我使用 moveToThread 方法,我必须调用 processEvents() 来发出超时,以执行 lambda。而且这似乎花费了
我正在为 qt 编写一个新的平台插件,我想了解“processEvents”虚拟方法应该做什么?我的要求是我在文件描述符上接收事件并且应该将它们转换为 qt gui 事件并将它们传递给 qt。请建议。
我正在为 qt 编写一个新的平台插件,我想了解“processEvents”虚拟方法应该做什么?我的要求是我在文件描述符上接收事件并且应该将它们转换为 qt gui 事件并将它们传递给 qt。请建议。
在处理各种事件时,我的一般策略是创建一个 xxxHandler 类,如 MouseHandler、WindowHandler 等,它扩展了 Java 提供的适当的 xxxAdapter 类。 我刚刚回
我有一个用 PySide 编写的 Qt 应用程序(Qt Python 绑定(bind))。这个应用程序有一个 GUI 线程和许多不同的 QThreads,它们负责执行一些繁重的工作——一些相当长的任务
我正在尝试做一个项目,使用 Qt GUI C++ 5.6.2 在窗口上创建一些图形。我有两个名为“createVerticalSpeedIndicator”和“createAirSpeedIndica
下面是我的代码,用于列出目录的所有子目录。我用它来理解 PySide 中的 QThread 以及信号和槽。问题是,当我没有在 Main 类的 scan() 方法中使用 Qtcore.QApplicat
大家好 在我的 QT 应用程序中,我使用 OpenMP 来并行化循环。在循环中,我想更新当前 QMainWindow 的进度条值。以下代码片段显示了我是如何尝试这样做的: #ifdef OPENMP_
我有一个执行大量 IO 的循环,所以我不时调用 qApp->processEvents() 以保持 GUI 的 react 性。在 Linux 上,这会导致严重错误,因为提前调用了事件。 是否有可能从
有一个 QApplication::lastWindowClosed() 信号。 Qt docs说: This signal is emitted from QApplication::exec()
我正在开展一个项目,该项目使用 Qt 的 QCustomPlot 插件显示实时获取的实时数据。显示屏的背景色为黑色,多个数据通道的颜色不同。截图时,我们想让它适合打印,所以背景是白色的,所有数据都是黑
我通过实现 Microsoft.TeamFoundation.Framework.Server.ISubscriber 编写了一个 TFS 2013 插件界面。在 ProcessEvent 方法中,我
PyQT4.11 Python 2.7 我一直在尝试创建一个启动屏幕,以在选择特定选项卡时显示加载消息。当调用 app.processEvents() 时,我会显示一个灰色框而不是图像,但是如果我在调
我的应用程序绘制图像并为其添加标签。当窗口在等待输入时关闭,应用程序仍然在后台运行。这是我的捕获标签的函数示例。我是否遗漏了一些让程序正常退出的东西? void CustomMainWindow::
我想念任何Qt如果我替换 QApplication::exec() 的功能使用标准的 Windows 消息循环实现?这应该澄清我的意思: 运行事件处理的常用“Qt”方式: int main(int a
我是一名优秀的程序员,十分优秀!