Qt QTimer est-il sûr d'arrêter de cette façon?
Est-il sûr d'arrêter de Qt minuterie de "timeout" signal/logement de fonction?
N'arrive pas à trouver toutes les informations dans la documentation de Qt sur le QTimer.
J'ai créé une minuterie qui est périodiquement de l'envoi d'un "keep alive" des messages sur le serveur.
Je veux que ce minuteur s'arrête quand il y a une sorte d'erreur lors de l'envoi de mon message.
private:
QTimer* mpKeepAliveTimer;
Timer est initialisé comme ceci:
mpKeepAliveTimer = new QTimer(/* this */);
QObject::connect(mpKeepAliveTimer, SIGNAL(timeout()), this, SLOT(OnKeepAlive()));
mpKeepAliveTimer->start(KEEP_ALIVE_PERIOD);
Arrêté comme ceci:
if (mpKeepAliveTimer != NULL) //<-- Edited
{
if (mpKeepAliveTimer->isActive() == true)
mpKeepAliveTimer->stop();
delete mpKeepAliveTimer;
mpKeepAliveTimer = NULL;
}
Fonction de délai ressemble à ceci:
void Classname::OnKeepAlive()
{
if (isErrorFound == true)
mpKeepAliveTimer->stop(); //<---- IS THIS SAFE?
}
Grâce.
Ce troisième bloc de code pourrait utiliser le raffinage. Il n'est pas nécessaire pour arrêter le retardateur avant, il est détruit. L'ensemble du bloc peut être réduite à
delete mpKeepAliveTimer; mpKeepAliveTimer = NULL;
OriginalL'auteur Gediminas | 2012-08-16
Vous devez vous connecter pour publier un commentaire.
Aussi longtemps que vous n'êtes pas explicitement à l'aide de file d'Attente de Connexions, c'est sûr.
C'est parce que le
emit timeout()
fonction ne sera pas de retour jusqu'à ce que toutes les fentes, il est connecté à ont été traitées.Si vous étiez cependant, l'utilisation de file d'Attente de Connexions, il pourrait, en théorie, qu'il y a encore non transformés, les événements de délai d'expiration en Cas de File d'attente, afin de le rendre hyper-sécurité vous pouvez utiliser les éléments suivants:
Remarque que la condition dans votre fonction d'arrêt doit être
!= NULL
au lieu de== NULL
. Vous pouvez aussi écrire que la fonction comme suit, cependant:Comme l'a déjà suggéré dans les commentaires, QTimer arrêtera de lui-même dans son destructeur.
OriginalL'auteur Tim Meyer