实再没办法了,希望高手指点"结束线程时的Memory Leak"

oliverlin 2003-11-14 06:25:43
我的请况是这样的:
程序开始后用AfxBeginThread创建了一个Worker Thread执行一系列的文件读写操作,并用DoModal弹出主窗口.
当线程正确执行完成并退出时,没有Memory Leak发生.
但如果从对话框中选择Cancel,中断线程则有Memory Leak提示.

请问各位DX,为了达到中途中断的目的,我应该如何做才能正常的结束线程,而不产生Memory Leak.

另外:我尝试定义static类型的标志,在点击Cancel按钮后给标志付值,希望线程自动结束,并尝试使用WaitForSingleObject来等待线程结束,结果是点击Cancel之后,从TaskManager观察确实没有线程活动,但是主程序进程并不结束;但如果我用OnOK()结束,又会有Memory Leak;
...全文
48 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oliverlin 2003-11-17
  • 打赏
  • 举报
回复
谢了,

问题解决,结
enoloo 2003-11-16
  • 打赏
  • 举报
回复
关注/
lop5712 2003-11-14
  • 打赏
  • 举报
回复
在Worker Thread的文件读写循环中用WaitForSingleObject( HANDLE, 0 )不停地等待一个事件(或其他同步对象),这个同步对象可以通过入口参数传进来。等待成功时,说明点了Cancel按钮,释放相应的文件资源及相关资源,然后return即可。

而在Cancel中,SetEvent那个事件(或其他同步对象),然后WaitForSingleObject( threadHandle, INFINITE );即可,其中threadHandle为AfxBeginThread返回的CWinThread::m_hThread(注意,应该指明创建挂起Thread,在获得了CWinThread::m_hThread后再resume它)。

15,471

社区成员

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

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