Win32 API有一个名为SetThreadpoolCallbackPriority()
的函数(实际上是一个宏)。
我想将它用于线程池I / O回调。 documentation稀疏,但提到“工作项目”。除了this blog entry之外,Google没有找到很多例子,后者再次讨论“工作项目”。
优先级是否真的适用于I / O?如果是,我该如何正确使用它?
答案 0 :(得分:1)
优先级是否真的适用于I / O
不,这仅对通过调用SubmitThreadpoolWork排队的工作项有效。如何在您的链接中注明绝对正确 -
此函数不会修改线程优先级;相反,它使用 低,高和普通优先工作项的单独队列
所以调用SetThreadpoolCallbackPriority只是间接方式将TP_CALLBACK_PRIORITY优先级参数传递给函数SubmitThreadpoolWork(Work)。对于我看起来更合乎逻辑的将是直接做这个和下一个签名 -
VOID WINAPI SubmitThreadpoolWork(
__inout PTP_WORK pwk, TP_CALLBACK_PRIORITY Priority
);
将此与下一个函数进行比较 - IoQueueWorkItem - SetThreadpoolCallbackPriority用户模式模拟和参数 WORK_QUEUE_TYPE QueueType - 如 TP_CALLBACK_PRIORITY优先级 - 说明哪个队列(存在) 3个不同的队列)插入工作项。对于I / O项目,这当然没有任何影响。当工作线程删除项目 - 它首先从高优先级删除它,使用它不为空,然后从正常,最后从低