今天温习很久前写的代码,发现自己写的这么一句代码,m_hTheard = CreateThread(NULL,0,RegNotifyProc,LPVOID(this),0,NULL);CloseHandle(m_hTheard);
突然给糊涂了,刚创建的线程,为什么有close了
通过查资料,解决了我的疑惑
线程和线程句柄(Handle)不同,线程是一个程序的工作流程,线程句柄是一个内核对象。线程的生命周期就是线程函数从开始执行到线程结束,线程句柄一旦CreateThread返回,如果你不用它操作线程或者等待线程等操作比如waitforsingleobject,就可以CloseHandle。CreateThread以后需要对这个线程做一些操作,比如改变优先级,被其他线程等待,强制TermateThread等,就要保存这个句柄,使用完了再操作CloseHandle。
CloseHandle只是关闭了一个线程句柄对象,表示我不再使用该句柄,即不对这个句柄对应的线程做任何干预了,和结束线程没有一点关系。若在线程执行完之后,没有调用CloseHandle,在进程执行期间,将会造成内核对象的泄露,相当于句柄泄露,但不同于内存泄露,这势必会对系统的效率带来一定程度上的负面影响。
关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。
以上是渣渣我的一点小看法,希望大神们不发辅助就算了,但也不要喷我。[img]http://s1.houdao.com/11884/photo/Mon_1411/148284_3652141611155298c3e77e96d6305.jpg[/img][img]http://s1.houdao.com/11884/photo/Mon_1411/148284_bb231416111551d7587c0306e083f.jpg[/img]