Je suis capable de créer un service Windows et de l'installer. P>
Je suis curieux comment puis-je courir ce service toutes les heures? Je veux que cela fonctionne chaque heure périodiquement. P>
J'ai aussi besoin de connaître l'heure de la plage de l'heure de la marche afin que je puisse le stocker quelque part. P>
Comment puis-je faire ça? P>
7 Réponses :
Vous pouvez créer un Tâche planifiée qui fonctionne toutes les heures, d'exécuter le service ou Envoyez un message à «Réveillez-le». Ensuite, soit transmettre à l'heure actuelle dans la demande de tâche planifiée, ou simplement que votre programme, récupérez l'heure actuelle lorsqu'il se réveille. P>
Wrapper géré de planificateur de tâches peut vous aider à définir cette option de manière programmatique; Vous pouvez également google pour d'autres ressources. P>
Mais je veux être capable de mettre en œuvre cela dans le code. Imaginez ce service sera installé dans de nombreux serveurs, je ne veux pas aller à chaque serveur et créer une tâche planifiée.
@ user177883: Vous pouvez créer des tâches planifiées de manière programmée comme vous pouvez créer des services de manière programmative.
Il y a quelques options. P>
Thread.Sleep(1000*60*60);
Que se passe-t-il si vous essayez d'arrêter le service pendant qu'il dort une heure?
@Philgan Solution Sleep vs stop i> b>?
Si vous souhaitez que une tâche soit exécutée sur un intervalle régulier par opposition à constamment, vous devez rechercher l'utilisation de planificateur de tâches . P>
Si vous avez besoin de votre code pour être un service, mais pour être "activé" toutes les heures, l'approche la plus simple consisterait à rendre votre service à un objet COM et à avoir une tâche simple planifiée toutes les heures qui invoque un Jscript / VBScript qui crée votre objet COM et appelle une méthode simple sur celle-ci. P>
L'alternative consiste à utiliser l'une des API d'attente pour "gaspiller" une heure sans consommer de cycles. P>
Notez que vous devez également prendre en compte des décisions de conception intéressantes qui dépendent de ce que votre scénario est: P>
Certaines de celles-ci sont prises en charge par le planificateur de la tâche, alors je recommanderais fortement à ce que la route v. attente d'une heure dans votre code. P>
Attendre le cycle de la CPU des déchets d'API? Pouvez-vous élaborer sur ce sujet? Attendez, c'est juste un événement soulevé par le système, je ne pense pas que cela sondre pour quoi que ce soit.
Je ne suis pas sûr de me comprendre correctement. J'essayais de dire que les API d'attente sont optimisées pour ne pas utiliser de cycles de CPU en attendant une période de temps pour s'écouler.
Thread.Sleep(TimeSpan.FromHours(1)); code more readable this way
thread.sleep () code> solution veillera à ce que votre service fonctionnera dans des intervalles d'une heure, pas toutes les heures I.E. Chaque tâche sera démarrée à 1 heure + l'exécution de la tâche. Pensez à utiliser un Minuterie au sein de votre service. Ce sera une solution plus robuste puisque vous avez un contrôle lorsque vous souhaitez exécuter une tâche, surveiller ses progrès, etc. N'oubliez pas que chaque
Minuterie code> sera tiré dans un fil différent et si la tâche prend plus de temps que Une heure à courir, vous devrez peut-être attendre que la première tâche de terminer pour éviter les tâches simultanées. P>
Les planificateurs de tâches peuvent être une bonne idée, mais les services sont conçus pour le faire. Les services sont installés facilement et se logent correctement. Tout ce que vous avez à faire est, au début du service, vous pouvez installer une minuterie système (System.threading.Timer) ou une minuterie supplémentaire. P>