gpt4 book ai didi

c++ - COM 函数生成不会消失的线程

转载 作者:可可西里 更新时间:2023-11-01 10:01:37 25 4
gpt4 key购买 nike

我正在开发一个小型应用程序,该应用程序旨在调用一些(非常多样化的)功能,遗憾的是这些功能超出了我的控制范围,并且设计的方式让我不知道何时完成了正确的用户操作。特别是其中一些会产生一个线程来完成它们的工作,最终会在未来的某个时刻死亡。所以有些是同步实现的,有些是异步实现的,我的代码不知道它会是哪一个。

我的应用程序的唯一目的是启动这些任务并在完成后终止。由于目的是自动化,我预计它会在短时间内从批处理文件中调用 100 次,所以我不希望这个过程停留的时间超过绝对可能的时间。

因为我没有可以等待的信号,我的主线程上的 ExitThread() 似乎是可行的方法,这样由外部代码产生的任何线程最终都会终止进程当它们终止时。

那么现在开始讨论标题中提到的实际问题。 :) 为了获得适合我的 jig 的接口(interface),我需要处理一些 COM 函数。 SHParseDisplayNameIShellFolder::GetUIObjectOf 和其他一些。但是在我完成这些接口(interface)并释放它们很久之后,这些线程仍然存在。即使在我调用 CoUninitialize() 之后也是如此。

当使用 Process Explorer 检查我的进程时,这些线程中的大多数似乎都以 ntdll.dll@EtwTraceMessageVa 作为入口点,并且卡在 ntdll.dll!ZwAlpcSendWaitReceivePort+0xa 。显然,这里不能使用 TerminateThread 随机终止线程。

当我用完它时,如何让 COM 终止这些线程?我正在使用 W7 x64 进行开发。

最佳答案

那些线程不属于 COM。它们属于 native Windows 线程池。它们被设计成可以粘在周围,因此可以在必要时重复使用。假设没有挂起的异步回调,您应该能够干净地关闭。线程池将负责及时销毁线程。

关于c++ - COM 函数生成不会消失的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4161839/

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