如果 QTimer 不停止会发生什么
What happen if QTimer doesn't stop
我有一个问题:如果我启动 QTimer 但不停止它,内存或其他情况会怎样。
这是我的代码:
文件 a.h
void updateProgressBar()
文件a.cpp
void updateProgressBar(){
timer= new QTimer(this);
timer->setInterval(1000);
timer->setSingleShot(false);
connect(timer,SIGNAL(timeout()),
myMainUi,
SLOT(setProgressBar()));
timer->start();
}
文件Main.cpp
int main(){
while(1){
updateProgressBar();
}
return 1;
}
谢谢
QTimer 从 Qt 内部事件循环中触发。
您的代码将创建无限数量的 QTimer,最终会崩溃。
如果您使用 Qt 编程,您将避免像 while (1) 这样的无限循环,这不会起作用,因为它会阻塞 Qt 事件循环。
鉴于您似乎有一个 UI,您的代码应该在 class 内,在这种情况下,在 class 定义中声明您的 QTimer 会更有意义作为私有成员而不是指针,然后在构造函数中对其进行初始化。
class MyClass: public QObject
{
Q_OBJECT
public:
void startUpdateProgressBar() {
myTimer.singleShot(false);
myTimer.start(1000);
}
void stopUpdateProgressBar() {
myTimer.stop();
}
private:
QTimer myTimer;
};
我有一个问题:如果我启动 QTimer 但不停止它,内存或其他情况会怎样。
这是我的代码: 文件 a.h
void updateProgressBar()
文件a.cpp
void updateProgressBar(){
timer= new QTimer(this);
timer->setInterval(1000);
timer->setSingleShot(false);
connect(timer,SIGNAL(timeout()),
myMainUi,
SLOT(setProgressBar()));
timer->start();
}
文件Main.cpp
int main(){
while(1){
updateProgressBar();
}
return 1;
}
谢谢
QTimer 从 Qt 内部事件循环中触发。
您的代码将创建无限数量的 QTimer,最终会崩溃。
如果您使用 Qt 编程,您将避免像 while (1) 这样的无限循环,这不会起作用,因为它会阻塞 Qt 事件循环。
鉴于您似乎有一个 UI,您的代码应该在 class 内,在这种情况下,在 class 定义中声明您的 QTimer 会更有意义作为私有成员而不是指针,然后在构造函数中对其进行初始化。
class MyClass: public QObject
{
Q_OBJECT
public:
void startUpdateProgressBar() {
myTimer.singleShot(false);
myTimer.start(1000);
}
void stopUpdateProgressBar() {
myTimer.stop();
}
private:
QTimer myTimer;
};