9
votes

Comment vérifier si Boost :: Daadline_TIMER est actif

N'importe quel moyen de vérifier si mortline_timer est actif? par exemple. Si c'est dans l'état async_wait et n'était pas annulé?


0 commentaires

4 Réponses :


2
votes

Trois options viennent à l'esprit:

  1. Créez votre propre classe de minuterie (en utilisant la date limite_timer, bien sûr) qui a son propre membre DO_ASYNC_WAIT. Dans ce membre, vous définissez une variable de membre qui peut ensuite être renvoyée à partir d'un membre Bool Iswaitting () ou similaire avant d'appeler l'async_wait sur la date limite interne_Timer. Notez que je ne pense pas que le membre async_wait est virtuel, vous ne pouvez donc pas hériter de mortline_timer et de remplacer. Notez que vous auriez également besoin de réinitialiser le drapeau lorsque votre gestionnaire est appelé (en faisant votre propre minuterie, le gestionnaire qui transmet ensuite à tout autre gestionnaire) ou lorsque l'annulation est appelée.

  2. Modifiez le code de boost pour faire ce que vous voulez. Ceci est parfaitement légal pour autant que je sache, mais cela n'est bien sûr pas une très bonne option.

  3. modifier vos exigences / conception afin de ne pas avoir besoin de le savoir.


0 commentaires

7
votes

Le gestionnaire pour le délai d'attente sera appelé avec une condition d'erreur si la minuterie a été annulée (ainsi qu'un délai normal). Pourriez-vous simplement définir simplement un bool avant d'appeler async_wait , puis réinitialiser cela dans le gestionnaire si la condition d'erreur est définie?


1 commentaires

ouais, venait de vérifier si je n'ai pas manqué quelque chose dans une interface Date limite_timer



2
votes

Que diriez-vous de cela? XXX


4 commentaires

Cela ne fonctionnera pas car la minuterie n'est pas garantie d'expirer exactement à temps.


Comment est-ce différent de tout autre minuteur?


Ce n'est pas "différent de tout autre minuteur". Mais si vous utilisez ce code pour détecter si la minuterie est active, il y a une condition de course dans laquelle cela reviendra véritable pour un petit intervalle avant l'expiration de la minuterie. Si vous utilisez ceci, par exemple, pour vérifier s'il est prudent de la mémoire libre, votre programme va s'écraser.


N'hésitez pas à suggérer une meilleure solution alors.



1
votes

Je sais que c'est un peu vieux à ce stade, mais j'ai une autre suggestion possible: que diriez-vous d'obtenir la mise en œuvre, puis de demander s'il existe éventuellement des attentes en attente. Cela ressemblerait à ceci: xxx


0 commentaires