等待加载的dll中的线程在Windows中完成

时间:2013-07-30 11:43:20

标签: windows multithreading winapi visual-c++

我有一个在我的主应用程序中动态链接的dll中运行的线程。有没有办法在不知道线程句柄的情况下等待.exe中的所有线程(包括它加载的dll)? Windows 7 x64,vc ++ 该线程是对某个文件进行某些处理的函数,它不会返回任何内容,它适用于在线程完成的某些阶段修改的全局类。线程函数调用其他函数。 我想等到函数的最后一行被执行。

2 个答案:

答案 0 :(得分:2)

我自己从未这样做,但你可能

  1. 使用CreateToolhelp32Snapshot
  2. 创建快照
  3. 然后使用Thread32FirstThread32Next
  4. 枚举线程
  5. 对于每个线程ID,使用OpenThread来获取句柄。确保以SYNCHRONIZE权限打开线程,以便最后
  6. 将所有线程句柄传递给WaitForMultipleObjects以等待所有线程句柄终止。

答案 1 :(得分:1)

另一个解决方案,假设你想要的只是停止main()函数运行但不退出进程直到任何其他线程完成,就是调用

ExitThread(GetCurrentThread());

来自main()。如果您没有显式地或通过从main()返回来调用ExitProcess,则在最后一个线程退出之前,Windows将不会退出。

请注意,执行此操作时存在一个主要问题,无论您如何处理它:如果您使用的某个Windows API启动了一个不会退出的线程,您的应用程序也不会退出。 / p>

正确的解决方案是DLL本身包含一个关闭函数,该函数在必要时等待自己的线程退出。