SetThreadpoolCallbackPriority是否适用于IO回调

时间:2016-07-05 21:46:25

标签: c++ winapi threadpool

Win32 API有一个名为SetThreadpoolCallbackPriority()的函数(实际上是一个宏)。

我想将它用于线程池I / O回调。 documentation稀疏,但提到“工作项目”。除了this blog entry之外,Google没有找到很多例子,后者再次讨论“工作项目”。

优先级是否真的适用于I / O?如果是,我该如何正确使用它?

1 个答案:

答案 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项目,这当然没有任何影响。当工作线程删除项目 - 它首先从高优先级删除它,使用它不为空,然后从正常,最后从低