用CreateThread或AfxBeginThread开始一个线程,当线程函数结束时线程是否也被终止?

时间:2021-03-17 18:26:44
用CreateThread或AfxBeginThread开始一个线程,当线程函数结束时线程是否也被终止?要有要加什么代码做清除工作?

14 个解决方案

#1


线程函数结束时线程也就终止了。

#2


函数结束了线程也就结束了。你可以在线程函数的内部用AfxEndThread,在
外部也可用TerminateThread去强行终止线程。

#3


没错, 函数结束时, 线程随即结束.无需其它处理.

当然, 假使你从堆上分配了内存, 应该delete掉

#4


只要线程函数结束,线程就终止了,你最多再使用CloseHandle关闭一下CreateThread返回的线程句柄。

#5


不一定的说。
你的线程函数退出以后C/C++运行期库还要做一些清理工作,随后就是真正退出了。

#6


嘿嘿,都说了,我撤.

#7


of course!!!sure!!!

#8


谢谢大家,再问一个问题马上结贴
CWinThread pThread=AfxBeginThread(...);
如果用delete pThread是不是就不用TerminateThread来结束线程了,和pThread相关的线程句柄都跟着释放了?

#9


NO,delete 没有这种用法。TerminateThread也应该少用,他不会做善后工作的!

#10


如果线程函数内部的局域变量从堆上分配了内存,而线程被从外部强行终止了,如何处理内存问题?

#11


如果线程函数内部的局域变量从堆上分配了内存,而线程被从外部强行终止了,如何处理内存问题?

#12


当然会结束。

#13


需要从堆上释放内存。如果你外部强行终止,必须在终止时释放内存。

#14


我的程序中经常要终止掉一个线程,每次我终止线程时就把pThread给delete掉,不知道这种方法是不是正确。请各位赐教。

#1


线程函数结束时线程也就终止了。

#2


函数结束了线程也就结束了。你可以在线程函数的内部用AfxEndThread,在
外部也可用TerminateThread去强行终止线程。

#3


没错, 函数结束时, 线程随即结束.无需其它处理.

当然, 假使你从堆上分配了内存, 应该delete掉

#4


只要线程函数结束,线程就终止了,你最多再使用CloseHandle关闭一下CreateThread返回的线程句柄。

#5


不一定的说。
你的线程函数退出以后C/C++运行期库还要做一些清理工作,随后就是真正退出了。

#6


嘿嘿,都说了,我撤.

#7


of course!!!sure!!!

#8


谢谢大家,再问一个问题马上结贴
CWinThread pThread=AfxBeginThread(...);
如果用delete pThread是不是就不用TerminateThread来结束线程了,和pThread相关的线程句柄都跟着释放了?

#9


NO,delete 没有这种用法。TerminateThread也应该少用,他不会做善后工作的!

#10


如果线程函数内部的局域变量从堆上分配了内存,而线程被从外部强行终止了,如何处理内存问题?

#11


如果线程函数内部的局域变量从堆上分配了内存,而线程被从外部强行终止了,如何处理内存问题?

#12


当然会结束。

#13


需要从堆上释放内存。如果你外部强行终止,必须在终止时释放内存。

#14


我的程序中经常要终止掉一个线程,每次我终止线程时就把pThread给delete掉,不知道这种方法是不是正确。请各位赐教。