【问题标题】:How to trigger an event when thread completes its work [closed]线程完成工作时如何触发事件[关闭]
【发布时间】:2018-01-31 06:06:27
【问题描述】:

用例:在 C++ 中创建线程池并将工作分配给所有线程。我想在线程池中的线程完成工作时触发一个事件。

但我不知道当线程池中的线程完成工作时如何触发事件。

例子:

void ThreadPoolImpl::InitThreadPool(){
pool = CreateThreadpool(NULL);
if (pool == NULL)
{
    //Log("Could not create a thread pool!");
    return;
}
InitializeThreadpoolEnvironment(&environment);
cleanupGroup = CreateThreadpoolCleanupGroup();
if (cleanupGroup == NULL)
{
    //Log("Could not create a thread pool cleanup group!");
}
SetThreadpoolCallbackPool(&environment, pool);
SetThreadpoolCallbackCleanupGroup(&environment, cleanupGroup, NULL);}


void ThreadPoolImpl::RunThreads(int const iThreadCount)

{

dwThreadCount = iThreadCount;
if (dwThreadCount == 0)
{
    dwThreadCount = DEFAULT_THREAD_COUNT;
}
SetThreadpoolThreadMaximum(pool, dwThreadCount);
SetThreadpoolThreadMinimum(pool, MIN_THREAD_COUNT);


work = CreateThreadpoolWork(workcallback,NULL,&environment);

if (NULL == work) {
    _tprintf(_T("CreateThreadpoolWork failed. LastError: %u\n"),
        GetLastError());
}

SubmitThreadpoolWork(work);//Want to trigger an event for each thread in thread pool

}

帮我解决这个问题。

提前致谢。

【问题讨论】:

  • 通过创建一个好的MCVE 来防止这个问题被关闭。

标签: c++ multithreading events threadpool


【解决方案1】:

为每个线程使用condition_variable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2017-08-23
    • 2020-09-12
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多