码迷,mamicode.com
首页 > 编程语言 > 详细

线程句柄有什么用

时间:2014-08-03 23:04:56      阅读:416      评论:0      收藏:0      [点我收藏+]

标签:des   blog   http   使用   os   io   文件   for   

非托管资 源:ApplicationContext,Brush,Component,ComponentDesigner,Container,Context,Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader,Pen,Regex,Socket,StreamWriter,Timer,Tooltip

以下转帖:http://www.cnblogs.com/candycaicai/archive/2011/02/23/1962554.html

 

今天温习很久前写的代码,发现自己写的这么一句代码,

m_hTheard = CreateThread(NULL,0,RegNotifyProc,LPVOID(this),0,NULL);
CloseHandle(m_hTheard);

突然给糊涂了,刚创建的线程,为什么有close了,还是当初入门不踏实,没有细想,现在反过来都记不得了,通过查资料,解决了我的疑惑。

1,线程和线程句柄(Handle)不同,线程是一个程序的工作流程,线程句柄是一个内核对象。线程的生命周期就是线程函数从开始执行到线程结束, 线程句柄一旦CreateThread返回,如果你不用它操作线程或者等待线程等操作比如waitforsingleobject,就可以 CloseHandle。

(ps:对于线程来讲,如果线程在运行状态则为无信号状态,在退出后为有信号状态。所以我们可以使用 WaitForSingleObject 来等待线程退出)

2,CreateThread以后需要对这个线程做一些操作,比如改变优先级,被其他线程等待,强制TermateThread等,就要保存这个句柄,使用完了再操作CloseHandle。

3、CloseHandle只是关闭了一个线程句柄对象,表示我不再使用该句柄,即不对这个句柄对应的线程做任何干预了,和结束线程没有一点关系。 若在线程执行完之后,没有调用CloseHandle,在进程执行期间,将会造成内核对象的泄露,相当于句柄泄露,但不同于内存泄露,这势必会对系统的效 率带来一定程度上的负面影响。但当进程结束退出后,系统会自动清理这些资源。

4、关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。

做一些总结,以作知识积累。

线程句柄有什么用,布布扣,bubuko.com

线程句柄有什么用

标签:des   blog   http   使用   os   io   文件   for   

原文地址:http://www.cnblogs.com/zhaoxinshanwei/p/3888918.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!