Se si desidera un compito da eseguire a intervalli regolari al contrario di continuo, si dovrebbe considerare di usare il Task Scheduler.
Se è necessario che il proprio codice sia un servizio, ma che venga "attivato" ogni ora, l'approccio più semplice sarebbe rendere il servizio un oggetto COM e avere un'attività semplice pianificata ogni ora che richiama un jscript/vbscript che crea il tuo oggetto COM e chiama il metodo semplice su di esso.
L'alternativa è quella di utilizzare una qualsiasi delle API di attesa per "rifiuto" di un'ora senza consumare cicli.
Nota che devi anche considerare alcune decisioni di progettazione interessanti che dipendono da ciò che lo scenario è:
- come è il vostro servizio sta per essere avviato se si arresta o viene fermato da parte dell'utente?
- se si è iniziato dopo più di un'ora, si dovrebbe eseguire nuovamente o si deve aspettare di salire sul esatto calendario oraria?
- come si fa a tenere traccia del l'ultima volta "attivazione" se il fuso orario o il tempo di risparmio luce del giorno è cambiato mentre tu non eri attivo?
- fa il vostro servizio impedire al computer di andare a dormire/hibernate sul minimo o quando il coperchio del computer è chiuso? se non, avete bisogno di risvegliare il computer ogni ora per ottenere il vostro servizio di lavorare sul vostro programma?
Alcuni di questi sono gestiti dall'utilità di pianificazione, quindi consiglio vivamente di seguire quella rotta in attesa di un'ora nel codice.
fonte
2010-04-07 02:56:06
L'attesa API spreca il ciclo della CPU? Puoi approfondire questo? L'attesa è solo un evento generato dal sistema, non penso che stia sondando nulla. –
Non sono sicuro che tu mi abbia capito correttamente. Stavo cercando di dire che le API di attesa sono ottimizzate per non utilizzare i cicli della CPU in attesa di un intervallo di tempo. –