如果我用SuspendThread将一个线程挂起,那么这时我要中止这个线程应该怎样做啊?

lewice 2004-08-25 09:34:36
问题如上,谢谢大家了,有点急
...全文
248 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jmcooler 2004-08-27
  • 打赏
  • 举报
回复
一句话,线程里进行耗时的操作时,必须在每步都检查退出标志或者事件,以在收到主程序的退出请求时,正常退出。工作线程里就入上面我讲的。而用户接口线程(或者称为界面线程),你只需要用PostThreadMessage给该线程Post一个WM_QUIT消息,然后等待线程退出。但接口线程里也不应该进行耗时的操作。
jmcooler 2004-08-27
  • 打赏
  • 举报
回复
线程被挂起时,是没有办法正常退出的。要么采用TerminateThread,强制关闭线程,至于TerminateThread关闭后,内存的释放问题,你可以把需要在线程里分配的内存挪到线程外面。既然是调用TerminateThread,那就是到了不得已的地步了,慎用这个函数。
正确的做法是,ResumeThread先让线程运行,再用WaitForSingleObject等待线程一短段时间。如果线程里有循环,你可以创建一个退出事件(Event),线程里每执行一步循环就用if( WaitForSingleObject( hExitEvent, 0 ) == WAIT_OBJCT_0 )则return。而主线程里需要设置这个事件,再用WaitForSingleObject等待线程退出。
chqu18 2004-08-26
  • 打赏
  • 举报
回复
应该要先ResumeThread吧,要不这样去终止一它可能会有资源不释放.
hjhd0 2004-08-26
  • 打赏
  • 举报
回复
像windows_editor(天鹅飞去鸟不归 回峰山中我独醉) 说的
线程的函数在设计的时候就要能相应退出消息 (在while循环内)
rwdx 2004-08-26
  • 打赏
  • 举报
回复
唤醒它,让你自己end,要不就Terminate
danielzhu 2004-08-26
  • 打赏
  • 举报
回复
先 ResumeThread,然后
AfxEndThread或者return 0;


如果ResumeThread,那么线程就会等待操作系统的ResumeThread事件,如果没有强制结束(TerminateThread)该线程,那么它就是一直处于挂起状态。
windows_editor 2004-08-26
  • 打赏
  • 举报
回复
挂起后不resume 那就不能让线程自己释放了, 只有Terminate
lewice 2004-08-25
  • 打赏
  • 举报
回复
我就是想知道不resumeThread,能否中止线程
danielzhu 2004-08-25
  • 打赏
  • 举报
回复
先 ResumeThread,然后
AfxEndThread或者return 0;
内存泄漏 2004-08-25
  • 打赏
  • 举报
回复
如果线程代码在堆中分配了内存,都会没有机会得到释放,确实会引起内存泄漏。。 微软也提醒要小心使用的。
lianglp 2004-08-25
  • 打赏
  • 举报
回复
那样的话,楼主这个问题就不好办了。
windows_editor 2004-08-25
  • 打赏
  • 举报
回复
终止?
如果线程正在循环
发送自定义消息, 线程收到这个消息后break循环,就可以了
lewice 2004-08-25
  • 打赏
  • 举报
回复
TerminateThread(),我听说不用它比较好,内存会漏的
lianglp 2004-08-25
  • 打赏
  • 举报
回复
TerminateThread()不可以吗?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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