线程被terminate掉之后,怎么释放其初始的栈空间

王嘉平 2004-06-13 08:22:01
情况是这样的,我程序里面有用TerminateThread来中止线程。但是由于程序是长时间运行的,结果发现2g的virtual space全部用完,以后的CreateThread就都失败了。原因是栈空间没释放,请问怎么释放? 我保证没有句柄泄漏,CloseHandle我都检查了。

thx
...全文
246 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sohou 2004-06-18
  • 打赏
  • 举报
回复
好象是自己结束的
enoloo 2004-06-18
  • 打赏
  • 举报
回复
非常同意 vcforever(霓裳羽衣)。

线程自己等待通知,然后结束。等待的时候是不怎么占cpu的。
solobird 2004-06-18
  • 打赏
  • 举报
回复
直接Terminate肯定无法释放的,要线程自己退出才能的。用事件内核对象吧。
王嘉平 2004-06-17
  • 打赏
  • 举报
回复
不是吧??? 难道就没办法释放???
vcforever 2004-06-17
  • 打赏
  • 举报
回复
可以不使用TerminateThread函数来结束线程,使用Event对象,在线程中用WaitForSingleObject()函数来等待,Event对象被激发!WaitForSingleObject函数返回后就调用return语句,让你得线程函数也返回,这样,线程所占得堆栈空间就可以释放了!

TerminateThread函数最初设计得时候就是保证线程结束后保留线程得堆栈空间,这样,在其他线程访问这个被TerminateThread函数结束得线程时才不至于发生访问违规得错误!
会思考的草 2004-06-17
  • 打赏
  • 举报
回复
应该是必须要通知线程自己结束。
另外,如果你有用到crt库的话,最好用__beginthreadex代替CreateThread,否则就算正常退出线程,也会有泄漏。
会思考的草 2004-06-17
  • 打赏
  • 举报
回复
这个好像是不可以的吧,整个进程结束后,系统会收回内存。
Wenxy1 2004-06-17
  • 打赏
  • 举报
回复
同意 Eearbird(early_bird).
comman_wang 2004-06-17
  • 打赏
  • 举报
回复
是否可以通过其他方法来代替CreateThread。
如AfxBeginThread或Thread Pooling
Eearbird 2004-06-17
  • 打赏
  • 举报
回复
TerminateThread,即使加上CloseHandle,也不能把所有的资源释放掉。

一种可行的办法:
通知线程关闭,然后可以使用WaitForSingleObject等待线程退出(handle使用的线程的句柄)。这样才能把栈空间释放掉。
badmanhd 2004-06-17
  • 打赏
  • 举报
回复
是呀!好象一般我们都是通知线程自己结束自己的!
lianglp 2004-06-17
  • 打赏
  • 举报
回复
楼主能否先通知线程关闭???
大脚板 2004-06-17
  • 打赏
  • 举报
回复
既然程序是长时间运行的,为什么要TerminateThread
thlintao 2004-06-15
  • 打赏
  • 举报
回复
恐怕不行了。除非你用内存优化软件,不过,这不是你的意思吧
王嘉平 2004-06-14
  • 打赏
  • 举报
回复
自己 up~~~

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧