【发布时间】:2012-08-16 07:08:48
【问题描述】:
在它的“超时”信号/槽函数中停止 Qt 的计时器是否安全? 在 Qt 文档中似乎找不到任何关于 QTimer 的信息。
我创建了一个计时器,它定期向服务器发送“保持活动”消息。 如果在发送我的消息时出现某种错误,我希望停止此计时器。
private:
QTimer* mpKeepAliveTimer;
定时器是这样初始化的:
mpKeepAliveTimer = new QTimer(/* this */);
QObject::connect(mpKeepAliveTimer, SIGNAL(timeout()), this, SLOT(OnKeepAlive()));
mpKeepAliveTimer->start(KEEP_ALIVE_PERIOD);
就这样停止了:
if (mpKeepAliveTimer != NULL) // <-- Edited
{
if (mpKeepAliveTimer->isActive() == true)
mpKeepAliveTimer->stop();
delete mpKeepAliveTimer;
mpKeepAliveTimer = NULL;
}
超时函数如下所示:
void Classname::OnKeepAlive()
{
if (isErrorFound == true)
mpKeepAliveTimer->stop(); // <---- IS THIS SAFE?
}
谢谢。
【问题讨论】:
-
第三个代码块可以使用精炼。没有必要在定时器被销毁之前停止它。整个区块可以缩减为
delete mpKeepAliveTimer; mpKeepAliveTimer = NULL;