线程初级问题

greentape 2000-02-18 09:51:00
我的程序中有一个线程, 在进程运行过程中它一直运行
没有显式的终止它。 那么在进程结束前我要调用
CloseHandle()来释放它的句柄吗?
创建线程后必须要显式地终止它吗?
而象我这样让它随着进程的中止而终止会带来什么问题吗?
...全文
169 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
netmare 2000-02-18
  • 打赏
  • 举报
回复
主线程退出时将隐式地调用ExitProcess,这将导致该进程的所有线程终止,而不把线程的终止通知DLL,且线程中try-finally,try-except结构的finally和except莫奎都不被执行
如果主线程退出时显式地调用ExitThread,将不终止其他线程,但其他线程中必须有一个显式地调用ExitProcess,否则即使所有线程都结束了系统也不认为该进程已结束
因此,最好在主线程退出时通知其他线程,待其他线程结束后再返回
ad 2000-02-18
  • 打赏
  • 举报
回复
greentape:
其实用m_bAutoDelete设为TRUE实现隐式终止线程是一个骗局,进程结束时只不过是根据这个变量决定是否调用有关的API函数。如果你直接用API函数编程,那就只有显示终止了,就是说不存在隐式终止法!
greentape 2000-02-18
  • 打赏
  • 举报
回复
显式终止就是在代码中调用了 TerminateThread, ExitThread之类的函数来
明确的杀掉thread.
fbq 2000-02-18
  • 打赏
  • 举报
回复
什么叫显式的终止?
greentape 2000-02-18
  • 打赏
  • 举报
回复
谢谢你 ad
但是我没用MFC, 而是用api创建的线程
ad 2000-02-18
  • 打赏
  • 举报
回复
将线程m_bAutoDelete设为TRUE,就不需要显示终止它,否则必须显示终止,不然会使进程无法完全结束,现象是:程序已关闭,但用ctrl+alt+del会看到进程仍在内存中,可以硬杀掉。

15,471

社区成员

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

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