导航:首页 > 编程系统 > closehandlelinux线程

closehandlelinux线程

发布时间:2025-01-13 14:22:12

① 创建线程后马上CloseHandle(threadhandle)起什么作用

摘抄:我在看代码时发现,如下一段代码:
HANDLE threadhandle = CreateThread(NULL, 0, RecvThreadProc, NULL, NULL, NULL);
CloseHandle(threadhandle);
不明白为什么创建线程后,要马上把线程的句柄关闭,这样做的目的是什么? 这样做会杀掉线程吗? 1,线程和线程句柄(Handle)不是一个东西,线程是在cpu上运行的.....(说不清楚了),线程句柄是一个内核对象。我们可以通过句柄来操作线程,但是线程的生命周期和线程句柄的生命周期不一样的。线程的生命周期就是线程函数从开始执行到return,线程句柄的生命周期是从CreateThread返回到你CloseHandle()。
2,所有的内核对象(包括线程Handle)都是系统资源,用了要还的,也就是说用完后一定要closehandle关闭之,如果不这么做,你系统的句柄资源很快就用光了。 计数减一而已,前提是你再不需要用这个线程句柄,这样线程结束后,资源立刻被释放。 内核对象由内核所拥有,而不是由进程所拥有。
在C l o s e H a n d l e 返回之前,它会清除进程的句柄表中的项目,该句柄现在对你的进程已经无效,不应该试图使用它。无论内核对象是否已 经撤消,都会发生清除操作。当调用C l o s e H a n d l e 函数之后,将不再拥有对内核对象的访问权,不过,如果该对象的使用计数没有递减为 0 ,那么该对象尚未被撤消。这没有问题,它只是意味着一个或多个其他进程正在使用该对象。当其他进程停止使用该对象时(通过调用C l o s e H a n d l e ),该对象将被撤消。

② 为什么必须要使用CloseHandle关闭句柄

很多程序在创建线程都这样写的:
ThreadHandle = CreateThread(NULL,0,.....);
CloseHandel(ThreadHandle );
1,线程和线程句柄(Handle)不是一个东西,线程是在内cpu上运行的.....(说不清容楚了),线程句柄是一个内核对象。我们可以通过句柄来操作线程,但是线程的生命周期和线程句柄的生命周期不一样的。线程的生命周期就是线程函数从开始执行到return,线程句柄的生命周期是从CreateThread返回到你CloseHandle()。
2,线程句柄是一种内核对象,系统维护着每一个内核对象,当每个内核对象引用记数为0时,系统就从内存中释放该对象,CloseHandle就是将该线程对象的引用记数减1。所有的内核对象(包括线程Handle)都是系统资源,用了要还的,也就是说用完后一定要closehandle关闭之,如果不这么做,你系统的句柄资源很快就用光了。
只是关闭了一个线程句柄对象,表示我不再使用该句柄,即不对这个句柄对应的线程做任何干预了。并没有结束线程。

阅读全文

与closehandlelinux线程相关的资料

热点内容
ipad密码锁屏取消密码怎么设置 浏览:944
如何给电脑添加网络信号 浏览:569
ps处理淘宝图片教程 浏览:208
电话卡免流app从哪里看 浏览:175
kaliset工具包 浏览:525
济南市长清区哪里学少儿编程 浏览:447
娄桥人民医院网站是多少 浏览:262
双十一数据是哪个国家 浏览:300
ipone转移数据后从哪里找 浏览:695
从电脑传视频到手机的哪个文件 浏览:478
windows找不到javaexe 浏览:732
excel表中同一列如何筛选相同数据 浏览:430
联想win10触摸板怎么拖拽文件 浏览:431
如何将电脑的文件存入c盘 浏览:801
extjs中table 浏览:184
pdf文件大写还是小写 浏览:34
js获取所有li标签的值 浏览:876
如何查看pe文件 浏览:484
乐视云盘电脑版怎么看自己的文件 浏览:662
讲编程在哪个平台好 浏览:598

友情链接