2009-12-10 3 views
0

Ma question est quand la minuterie commence à cocher. Prenons, par exemple, la minuterie qui est configurée pour cocher toutes les secondes et je démarre mon programme sur hh:mm:ss:ms = 22:40:34.50. La tique va commencer au tour sec? Commencez 17:40:35.00 ou c'est à l'heure exacte? Donc, la première coche sera sur 17:40:35.50 et la suivante sur 17:40:36.50. Ce que j'essaie en fait de résoudre, c'est que je veux faire fonctionner 05:00:00.00 AM tous les jours, mais seulement pour une fois. J'ai construit un système d'heures de travail et parfois les travailleurs oublient de "fermer" leur équipe, donc à 5h du matin, je veux vérifier qui n'a pas fermé et faire une erreur à ce sujet. Comment pouvez-vous penser que je peux résoudre le problème?Timers En C#, lorsque la minuterie commence à clignoter?

+0

Copie possible: http://stackoverflow.com/questions/1297109 – dtb

+0

Copie possible: http://stackoverflow.com/questions/1434005 – dtb

Répondre

12

Windows n'est pas en temps réel, ce qui signifie que des choses comme «chaque seconde» vont être des approximations. Je suis sûr qu'il n'y a même pas de garantie que, par exemple, une minuterie d'une seconde tirera exactement 60 fois par minute, ou exactement 3600 fois par heure.

Si vous devez effectuer une tâche spécifique à 5h00 du matin, votre meilleur pari est d'avoir une tâche planifiée qui fonctionne à 05h00, ou un service qui interroge l'heure toutes les quelques secondes et s'exécute une fois 5: 00 heures passe.

+5

+1 pour la tâche planifiée. C'est incroyable combien de personnes veulent programmer la fonctionnalité qui est intégrée dans le système d'exploitation – ChrisF

+0

oui je peux à cela mais j'essaie de réduire les programmes qui se connectent à DB pour le rendre plus sûr. c'est juste une fonction simple que je veux lancer ... maintenant ça fonctionne tous les 500ms, mais je peux faire du mabye chaque seconde et m'assurer que ça arrive toujours à 5h du matin ... je l'ai eu? – Mazki516

+0

@ Mazki516 - une tâche planifiée est la voie à suivre. Windows le lancera à 5h00 et ne se connectera à la base de données que lorsqu'elle sera en cours d'exécution. – ChrisF

4

La minuterie démarre dès que vous appelez la méthode Start. Il n'attendra pas une seconde ronde. La minuterie ne peut pas garantir les temps exacts entre les ticks. Si vous lui donnez un intervalle de 1 sec, il s'assurera qu'au moins une seconde s'est écoulée depuis la dernière coche. Vous pouvez résoudre votre problème de la même manière et effectuer votre travail 5 heures une fois par jour la première fois que le chronomètre s'écoule après 5 heures du matin. Ou si vous êtes sûr que ceux qui entretiennent le système connaîtront les tâches planifiées, la suggestion d'Aric TenEyck d'utiliser une tâche planifiée est une excellente façon de résoudre votre problème.

Questions connexes