c++ - CreateThread 后跟 TerminateThread 留下大量内存

标签 c++ windows multithreading winapi

我使用 CreateThread 然后使用 TerminateThread 来取消线程。看起来堆栈空间仍然被分配。有办法解决这个问题吗?我没有使用任何形式的动态内存调用,例如 malloc/new。线程不必优雅地退出。 10 个线程留下高达 5 MB 的内存!线程都在代码的不同部分,那么有没有一种简单的方法来实现线程间通信系统,它可以告诉它们全部退出,从而重新定位堆栈?

最佳答案

在大多数情况下,您应该使用TerminateThread()。如果您在应用程序中创建新线程,您有责任确保这些线程正常退出。当您使用 TerminateThread() 时,可能会留下各种资源,因为此函数只是终止线程而不调用清理函数。

TerminateThread documentation

您应该做的是使用事件(或其他信号方法)告诉您的线程它们应该关闭。当线程在内部接收到消息(事件发出信号或等待期满等)时,线程函数可以在内部清理并返回。这样您就可以正确退出您的线程,而不会留下一团糟。

关于c++ - CreateThread 后跟 TerminateThread 留下大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12242252/

相关文章:

c++ - LibPrivoxy : unresolved external symbol __declspec(dllimport) int __stdcall StartPrivoxy(char *)

c++ - 在共享库的用户之间共享数据

c++ - 通过 SWIG 从 Ruby 调用 C++ 函数

java - Android 后台服务中的线程

java - 使用预定义 key 锁定的竞争条件解决方案

c++ - 当我的程序不在焦点时,不获取 GetAsyncKeyState。玩游戏时不工作

c# - 如何识别安装程序文件?

windows - 如何在批处理文件中获取一年中的某一天

windows - 无法从 Windows 命令提示符运行 curl 命令,但可以从 cygwin 驱动器运行它

java - Java中的同步方法和同步块(synchronized block)有什么区别?