Fil dormir / attendre jusqu'à un nouveau jour
Je suis en cours d'exécution d'un processus en boucle, ce qui a une limite sur le nombre d'opérations qu'il n'par jour. Quand il atteint cette limite que j'ai actuellement a obtenu la vérification de la de la fois en boucle pour voir si une nouvelle date.
Serait la meilleure option pour:
- Garder le contrôle du temps à chaque seconde pour la nouvelle date
- Calculer le nombre de secondes jusqu'à minuit et le sommeil que la longueur de temps
- Quelque chose d'autre?
source d'informationauteur finoutlook
Vous devez vous connecter pour publier un commentaire.
Ne pas utiliser de Fil.Dormir pour ce type de chose. Utiliser un Minuterie et de calculer la durée, vous devrez attendre.
Remplacer le
/* Do Work */
délégué à la fonction de rappel qui permettra de reprendre votre travail à l'intervalle spécifié.Edit: Comme mentionné dans les commentaires, il y a beaucoup de choses qui peuvent mal se passer si vous assumez le "temps écoulé" d'une demande d'attendre pour est va correspondre à des temps réels. Pour cette raison, si le temps est important pour vous, il est préférable d'utiliser de plus petits intervalles d'interrogation pour savoir si l'horloge a atteint le temps que vous voulez de votre travail pour arriver à.
Encore mieux serait d'utiliser le Planificateur de Tâches de Windows pour exécuter votre tâche à l'heure souhaitée. Ce sera beaucoup plus fiable que d'essayer de mettre en œuvre vous-même dans le code.
Windows dispose d'un le planificateur de tâches qui traite exactement de ce devoir. Créer le programme pour faire ce qu'il est censé faire. Puis de le configurer en tant que tâche planifiée.
Simplement calculer une période d'attente et l'exécution asynchrone de la minuterie de cette façon, vous pouvez éviter la surcharge du PROCESSEUR consommant en attendant:
D'examiner les deux options que vous avez fournis:
Il y a 60*60*24 = 86 400 secondes par jour, de sorte que vous pourriez potentiellement faire beaucoup de vérifier si vous atteignez la limite tôt. En outre, occupé attente est un gaspillage de cycles de CPU, et il va ralentir tout ce qui est en cours d'exécution.
Vous devez calculer le nombre de secondes jusqu'à minuit et le sommeil de temps (mais je crois que le sommeil paramater prend ms plutôt que de s, donc une simple conversion peuvent être nécessaires).
EDIT:
Un avantage supplémentaire de calcul puis de couchage est que si un utilisateur veut contourner votre restriction par la modification de l'horloge, ils ne seront pas en mesure d' (depuis l'horloge de lecture de minuit de ne pas réveiller le processus comme il le ferait avec continuel de la vérification). Cependant, avec une meilleure compréhension de la façon dont le programme fonctionne en interne, l'utilisateur peut modifier l'horloge à près de minuit, chaque fois qu'ils sont sur le point d'atteindre la limite de l'exploitation, entraînant le fil pour se réveiller dans quelques minutes ou même quelques secondes. C'est un plus compliqué d'exploitation que serait faisable avec votre première suggestion, mais il peut être fait.
C'est comment je fais un thread de sommeil jusqu'à demain 6H