我一直在玩Windows'(新?)線程池API。我一直在關注Using the Thread Pool Functions中的示例,並且我一直在仔細研究MSDN上的API。有些東西我沒有得到關於清理組的信息。取消WIN32線程池中的計劃任務/ io /計時器項目
當調用所述SetThreadpoolCallbackCleanupGroup()
,如果被解除關聯的對象之前清理組被取消該第三參數被描述爲
的清理回調被調用。當您致電
CloseThreadpoolCleanupGroupMembers()
時,將調用該功能。
如果我的理解是正確的,你可以取消待審批工作/ IO /定時器的項目,並要求它的方式來調用這些對象的的而不是清理回調函數原先排隊的工作/ IO /定時器項目的回調。這聽起來很酷,我想用它。
不幸的是,用於有問題回調的PTP_CLEANUP_GROUP_CANCEL_CALLBACK
類型沒有在MSDN上記錄,有關示例也沒有使用該功能。
把法律掌握在我自己的手中,我已經將定義追溯到WinNT.h
並找到以下內容。
typedef VOID (NTAPI *PTP_CLEANUP_GROUP_CANCEL_CALLBACK)(
__inout_opt PVOID ObjectContext,
__inout_opt PVOID CleanupContext
);
拆卸這個有趣的尋找報關克魯夫特讓你:
typedef void (__stdcall * PTP_CLEANUP_GROUP_CANCEL_CALLBACK)
(void* ObjectContext, void* CleanupContext);
問題:如果你將不得不採取一個受過教育的猜測,您如何看待ObjectContext
和CleanupContext
指什麼?
我的第一個猜測是CleanupContext
是您在啓動清理時指定的內容:因此第三個參數爲CloseThreadpoolCleanupGroupMembers()
。我非常有信心,這個猜測是正確的,因爲API調用是直接相關的。
我的第二個猜測是ObjectContext
是您在提交工作/ io /計時器項目時指定的內容:這是CreateThreadpoolWork()
等人的第二個參數。我完全不確定是這樣。
有人可以confim這些猜測是正確的嗎?有沒有人使用過這個功能?
謝謝!在發佈問題後,我昨天進行的一個簡單測試證實了我對這些指針的猜測,但我很高興我等待了您的答案。我誤解了有關創建/提交/關閉工作對象的一些文檔,並想知道爲什麼清理是爲所有工作對象調用的。 – 2010-11-19 17:02:40