C# 线程运行完之后自己会不会释放掉

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 线程运行完之后自己会不会释放掉相关的知识,希望对你有一定的参考价值。

Thread th = new Thread(new ThreadStart(SendFile)); th.Start();

现在VS的垃圾回收机制已经很完善了,大多时候都不需要去关心这个,如果只是做个简单的应用,对资源的合理分配和有效利用要求不高,那么就不必在意 参考技术A 线程执行完会自动关闭线程,但前提是它能够执行完。 参考技术B 一般情况下会

CWinThread类,使用后要不要使用CloseHandle释放内核

在VC++中用AfxBeginThread()开启线程的时候,返回的是CWinThead类的指针。但是使用后是否应该用CloseHandle释放内核资源呢?

在《Windows核心编程》中说在使用ExitThread()函数终止线程的时候虽然系统资源会被清理掉,但是C/C++资源(如C++类资源)不会被销毁。使用TerminateThread函数终止线程时,该线程的堆栈资源是不会被销毁的。并建议最好的使线程结束的方式就是使线程函数正常退出。但是这里不知道是否要用CloseHandle来关闭系统内核对象,也就是句柄。以及是否需要delete CWinThread指针。

经查MSDN,在CWinThread类中有个m_bAutoDelete的变量,该变量是在线程结束的时候是否Delete掉自己,而这个值默认是设为TRUE的。delete的时候是会执行该类的析构函数的,在析构函数中应该是会销毁系统资源的。如下图,m_bAutoDelete的值是1。

技术分享图片

当线程结束的时候,在查看CWinThread类中的值,发现是乱码之类的,这时其实该CWndThread指针所指的对象已经被delete掉了。如下图:

技术分享图片

以上是关于C# 线程运行完之后自己会不会释放掉的主要内容,如果未能解决你的问题,请参考以下文章

C# kill线程正常释放资源?

C#中using(...){...}的意思

在sql server 2000中进行内存的自动释放怎么实现?拜托各位了 3Q

c# 一个程序关闭,如果有前台线程还在运行,当前台线程运行完是不是会关闭?还是一直存在?

C#无法访问已释放的对象

对象的notify方法的含义和对象锁释放的三种情况