我有一个在我的主应用程序中动态链接的 dll 中运行的线程。有没有办法在不知道线程句柄的情况下等待 .exe 中的所有线程(包括它加载的 dll)?Windows 7 x64, vc++ 线程是对某个文件进行某些处理的函数,它不会返回任何内容,它适用于在线程完成的某些阶段被修改的全局类。线程函数调用其他函数。我想等到函数的最后一行被执行。
问问题
1177 次
2 回答
2
我自己从来没有这样做过,但你可能可以
- 使用创建快照
CreateToolhelp32Snapshot
Thread32First
然后使用和枚举线程Thread32Next
- 对于每个线程 ID,用于
OpenThread
获取句柄。确保您打开具有SYNCHRONIZE
特权的线程,以便您最终可以 - 将所有线程句柄传递
WaitForMultipleObjects
给等待它们全部终止。
于 2013-07-30T11:48:07.400 回答
1
另一种解决方案,假设你想要的只是停止 main() 函数运行但在任何其他线程完成之前不退出进程,是调用
ExitThread(GetCurrentThread());
从 main() 中。如果你不调用ExitProcess
,无论是显式调用还是从 main() 返回,Windows 都不会退出,直到最后一个线程退出。
请注意,这样做存在一个主要问题,无论您如何处理它:如果您使用的 Windows API 之一启动了一个不会退出的线程,那么您的应用程序也不会退出。
正确的解决方案是让 DLL 本身包含一个关闭函数,该函数在必要时等待其自己的线程退出。
于 2013-08-08T03:28:54.867 回答