0

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

4

2 回答 2

11

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

终止线程文档

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

于 2012-09-03T05:12:01.113 回答
3

主线程上的非自动重置事件和 WaitForMultipleObjects 将执行您想要的操作。如果您发现自己超过 64 个并发工作线程,则必须重新调整以使用不同的方法,例如非自动重置事件和信号量。从字面上看,有几十种方法可以解决这个问题,互联网上的论坛上有无数示例,以及 MS 在其 Visual Studio 分发中的示例。从那些开始。

于 2012-09-03T05:17:47.270 回答