2009-12-16 42 views

回答

7

等待定時器被設計爲通過APC激活代碼。由於再次入侵問題很難正確解決問題,因此只有在需要在佔用的線程上運行代碼時才需要考慮,但通常阻塞的程序塊允許APC運行。

定時器隊列是非常輕量級的對象,它們的回調在線程池的(廉價)線程上運行。幾乎總是適合定期服務。

第三種方法是在服務啓動時啓動一個線程,並使用WaitForSingleObject()的WaitForSingleObject()來設置它的超時時間。你會等待一個事件,表明服務應該停止。非常容易上手,不像計時器隊列那麼精簡。

+2

好評。我們傾向於在S​​etWaitableTimer中爲完成例程傳遞NULL,將它變成一個正常的,可等待的句柄。任何優點/缺點使用這種方式與定時器隊列? – 2009-12-16 20:17:49

+0

執行WaitForSingleObject方法的另一種方法是使用RegisterWaitForSingleObject - 這種方式仍然可以使用線程池。 – 2009-12-16 21:29:47