宿主进程退出 DLL线程还在 如何进程退出前退出DLL线程

创建线程

img

宿主进程退出 但是下面这样写 宿主进程退出了 DLL线程还在

img


没退出前

img

退出后

img

线程依赖于进程,不可能进程关闭了线程还在的啊
进程列表里看到的都是进程啊
你这是程序窗口关掉了,但实际进程并没有退出,可能是线程一直在哪导致进程不能结束。
再进程退出前,通知子线程先关闭

任务管理器看到的是进程,不是线程,进程线程相关概率了解清楚。
一个进程包含一个或多个线程,进程退出时,该进程的所有线程都会自动退出的。
Windows下创建进程,创建者的进程退出时,被创建的进程是不会退出的。

代码里找调用CreateProcess创建进程的地方,把创建的hprocess保存到一个全局变量
退出前调用 TerminateProcess,先结束创建出来的进程,然后自身进程再退出。

1,您可以使用procexp64.exe来查看进程的所有线程运行情况
2,可以参考这篇文章,退出线https://blog.csdn.net/iteye_11500/article/details/81521939
3,实在不行的话,调用ExitThread退出线程

1、带有内部线程DLL要想正常退出,需要导出一个退出函数接口,并且要求调用者在适当的时候调用。

2、要注意DLL中全局变量析构前,线程可能已经被强行终止,如果在析构中依赖某个线程完成一些工作,则要考虑这种可能性,但是直接等待线程句柄没有问题

3、在DLL代码中使用atexit注册的函数,不能期望在进程退出时被调用,另外不管是在DLL还是EXE代码中,不能将其他模块的函数注册到atexit中。

退出前给个信号,让线程自行结束,退出代码waitforsingleobject等待线程退出激活,即可正常关闭线程并退出进程。