2009-12-16 9 views

risposta

7

Un timer è stato progettato per attivare il codice tramite un APC. Questo è piuttosto difficile da ottenere a causa di problemi di re-entrancy e dovrebbe essere preso in considerazione solo se è necessario eseguire il codice su un thread che è occupato in altro modo ma blocchi abbastanza spesso da consentire l'esecuzione di un APC.

Le code di timer sono oggetti molto leggeri, la loro callback viene eseguita su un thread (economico) dal pool di thread. Quasi sempre buono per un servizio periodico.

Un terzo modo è avviare un thread all'avvio del servizio e bloccarlo con WaitForSingleObject() il cui timeout imposta il punto. Aspetteresti un evento che segnali che il servizio dovrebbe fermarsi. Molto facile da usare, non così snello come una coda di attesa.

+2

Buoni commenti. Tendiamo a passare NULL per la routine di completamento in SetWaitableTimer, trasformandolo in una normale, attesa, maniglia. Qualunque pro/contro lo utilizza in questo modo rispetto alle code del timer? –

+0

Un altro modo per eseguire il metodo WaitForSingleObject consiste nell'utilizzare RegisterWaitForSingleObject: in questo modo è comunque possibile utilizzare il pool di thread. –