Multithreading 如何正确关闭WINAPI线程池以取消挂起的任务
我有一个关于关闭WINAPI线程池的问题 假设我使用清理组初始化了一个线程池,并使用SubmitThreadpoolWork将一些任务推送到线程池中。 我正在任务的回调函数中调用CloseThreadPoolTask 当前线程池队列中有正在执行的任务和挂起的其他任务 现在,为了关闭线程池,我想使用CloseThreadpoolCleanupGroupMembers函数而不挂起队列中的任务来完成,但我仍然想获得挂起任务的回调,以释放其用户分配的资源(一些资源随任务参数一起提供)。 我在这条线上看到: 我传递给清理组的回调(PTP_cleanup_group_CANCEL_回调)也将调用当前正在执行的工作对象(因为它们在执行期间仍然绑定到清理组)-显然我不希望发生这种情况。。。有没有一种方法可以在当前正在执行的任务上不调用cleanup cancel回调Multithreading 如何正确关闭WINAPI线程池以取消挂起的任务,multithreading,winapi,threadpool,Multithreading,Winapi,Threadpool,我有一个关于关闭WINAPI线程池的问题 假设我使用清理组初始化了一个线程池,并使用SubmitThreadpoolWork将一些任务推送到线程池中。 我正在任务的回调函数中调用CloseThreadPoolTask 当前线程池队列中有正在执行的任务和挂起的其他任务 现在,为了关闭线程池,我想使用CloseThreadpoolCleanupGroupMembers函数而不挂起队列中的任务来完成,但我仍然想获得挂起任务的回调,以释放其用户分配的资源(一些资源随任务参数一起提供)。 我在这条线上看到
谢谢 如果CreateThreadpoolWork的回调开始执行,则不会调用它的清理回调。或者,如果将调用项的取消回调-
PTP\u WORK\u回调将永远不会调用此项(之前和之后)。所以这里真的没有任何问题。或将被称为您的PTP\u WORK\u CALLBACK
,或将被称为此项目的取消CALLBACK。这是相互排斥的。所以在包含非常严重错误的主题中回复。我可以建议您在PTP\u WORK\u CALLBACK
开始时调用test insertMessageBox
并在CloseThreadpoolCleanupGroupMembers
之前调用另一个MessageBox
。您可以确保如果PTP\u WORK\u CALLBACK
begin executed-取消此项尚未调用的回调。非常感谢您的回答!我已经根据你所说的对这件事进行了测试,我还有另外一点要说清楚。我使用了一个有1个线程的池,推送了5个任务,这些任务会休眠1分钟。调用CloseThreadpoolCleanupGroupMembers后,仅在线程完成其工作后调用cleanup Cancel回调,并且仅调用了4次(仅针对挂起的作业)