gpt4 book ai didi

c++ - 如何使用 Win32 线程池 API?

转载 作者:行者123 更新时间:2023-11-30 03:30:33 25 4
gpt4 key购买 nike

此版本(基于 this 文章)有效:

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

VOID
CALLBACK
MyWorkCallback(
PTP_CALLBACK_INSTANCE Instance,
PVOID Parameter,
PTP_WORK Work
)
{
// Instance, Parameter, and Work not used in this example.
UNREFERENCED_PARAMETER(Instance);
UNREFERENCED_PARAMETER(Parameter);
UNREFERENCED_PARAMETER(Work);

DWORD threadId = GetCurrentThreadId();

BOOL bRet = FALSE;

//
// Do something when the work callback is invoked.
//
{
_tprintf(_T("MyWorkCallback: ThreadId = %d Task performed.\n"), threadId);
}

return;
}

int main()
{
TP_CALLBACK_ENVIRON CallBackEnviron;
PTP_POOL pool = NULL;
PTP_CLEANUP_GROUP cleanupgroup = NULL;
PTP_WORK_CALLBACK workcallback = MyWorkCallback;
PTP_TIMER timer = NULL;
PTP_WORK work = NULL;


InitializeThreadpoolEnvironment(&CallBackEnviron);
pool = CreateThreadpool(NULL);
SetThreadpoolThreadMaximum(pool, 1);
SetThreadpoolThreadMinimum(pool, 3);
cleanupgroup = CreateThreadpoolCleanupGroup();
SetThreadpoolCallbackPool(&CallBackEnviron, pool);
SetThreadpoolCallbackCleanupGroup(&CallBackEnviron, cleanupgroup, NULL);
work = CreateThreadpoolWork(workcallback, NULL, &CallBackEnviron);
for (int i = 0; i < 10; ++i)
{
SubmitThreadpoolWork(work);
}
}

但是,这个版本也可以工作(与上面的工作函数相同):

int main()
{
PTP_WORK = CreateThreadpoolWork(workcallback, NULLPTR, NULLPTR);
for (int i = 0; i < 10; ++i)
{
SubmitThreadpoolWork(work);
}
}

这两个版本有什么区别(最小和最大线程数除外)?
为什么我要使用一个版本而不是另一个版本?

最佳答案

InitializeThreadpoolEnvironment 的文档中对此进行了介绍:

Create a callback environment if you plan to call one of the following functions to modify the environment:

  • SetThreadpoolCallbackCleanupGroup

  • SetThreadpoolCallbackLibrary

  • SetThreadpoolCallbackPool

  • SetThreadpoolCallbackPriority

  • SetThreadpoolCallbackRunsLong

如果您需要一个或多个列出的函数提供的功能,那么您需要创建一个回调环境。如果你不这样做,你就不会。

如果在开始新项目时有疑问,请使用简单的方法开始,看看它是否满足您的需求。如果有必要,您可以随时返回并切换到更复杂的变体。

关于c++ - 如何使用 Win32 线程池 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44867465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com