首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Win32 ThreadPool API?

如何使用Win32 ThreadPool API?
EN

Stack Overflow用户
提问于 2017-07-02 04:28:43
回答 1查看 1.7K关注 0票数 1

此版本(基于工作:

代码语言:javascript
复制
#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);
    }
}

但是,这个版本也能工作(具有与上面相同的工作功能):

代码语言:javascript
复制
int main()
{
    PTP_WORK = CreateThreadpoolWork(workcallback, NULLPTR, NULLPTR);
    for (int i = 0; i < 10; ++i)
    { 
        SubmitThreadpoolWork(work);
    }
}

这两个版本之间有什么不同(除了最小线程数和最大线程计数)?

为什么我要用一个版本而另一个版本呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-02 06:46:32

这将在InitializeThreadpoolEnvironment的文档中进行讨论。

如果计划调用下列函数之一以修改环境,则创建回调环境:

  • SetThreadpoolCallbackCleanupGroup
  • SetThreadpoolCallbackLibrary
  • SetThreadpoolCallbackPool
  • SetThreadpoolCallbackPriority
  • SetThreadpoolCallbackRunsLong

如果需要一个或多个列出的函数提供的功能,则需要创建回调环境。如果你不去,你就不去。

如果在开始一个新项目时有疑问,请首先使用简单的方法,看看它是否符合您的需要。如果需要的话,您总是可以返回并切换到更复杂的变量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44867465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档