用AfxBeginThread()创建工作线程后怎么删除这个线程呢?

linkaihui 2005-12-07 09:46:49
我用MFC进行多线程编程,用AfxBeginThread()创建工作线程后怎么删除这个线程呢?我只知道在CWinThread类中将m_bAutoDelete==TRUE后就可以自动删除,是这样吗?或者是不要设置这个系统自动会删除这个工作线程呢?
...全文
484 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2005-12-10
  • 打赏
  • 举报
回复
http://www.microsoft.com/msj/0797/multithreading.aspx
问道er 2005-12-10
  • 打赏
  • 举报
回复
(1) 线程函数返回(最好使用这种方法)。
这是确保所有线程资源被正确地清除的唯一办法。
如果线程能够返回,就可以确保下列事项的实现:
在线程函数中创建的所有C++对象均将通过它们的撤消函数正确地撤消。
操作系统将正确地释放线程堆栈使用的内存。
系统将线程的退出代码设置为线程函数的返回值。
系统将递减线程内核对象的使用计数。
(2) 调用ExitThread函数(最好不要使用这种方法)。
该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源。但是,C++资源(如C++类对象)将不被撤消。
(3) 调用TerminateThread函数(应该避免使用这种方法)。
TerminateThread能撤消任何线程。线程的内核对象的使用计数也被递减。TerminateThread函数是异步运行的函数。如果要确切地知道该线程已经终止运行,必须调用WaitForSingleObject或者类似的函数。当使用返回或调用ExitThread的方法撤消线程时,该线程的内存堆栈也被撤消。但是,如果使用TerminateThread,那么在拥有线程的进程终止运行之前,系统不撤消该线程的堆栈。
(4) 包含线程的进程终止运行(应该避免使用这种方法)。
由于整个进程已经被关闭,进程使用的所有资源肯定已被清除。就像从每个剩余的线程调用TerminateThread一样。这意味着正确的应用程序清除没有发生,即C++对象撤消函数没有被调用,数据没有转至磁盘等等。
一旦线程不再运行,系统中就没有别的线程能够处理该线程的句柄。然而别的线程可以调用GetExitcodeThread来检查由hThread标识的线程是否已经终止运行。如果它已经终止运行,则确定它的退出代码。
dingpiao 2005-12-07
  • 打赏
  • 举报
回复
线程函数退出就完了。
weiyongzhao 2005-12-07
  • 打赏
  • 举报
回复
如果是工作线程,可以用AfxEndThread(0)来退出,但是一般只要函数退出了,线程就会退出的

如果是界面线程,没用过,我不懂。
rageliu 2005-12-07
  • 打赏
  • 举报
回复
执行完了自动退出!!!

也可以ExitThread()
TerminateThread()
oyljerry 2005-12-07
  • 打赏
  • 举报
回复
让线程自己退出
或设置 m_AutoDelete

15,471

社区成员

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

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