导航:首页 > 编程系统 > 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线程相关的资料

热点内容
当前无网络怎么解决 浏览:299
x200thinkpad升级 浏览:568
华为mate8几个版本的区别 浏览:582
怎样把一个excel拆分多个文件 浏览:388
图片重命名添加上一级文件名 浏览:940
java读linux文件换行符 浏览:995
oracel客户端工具 浏览:557
自学编程语言从哪里入手 浏览:401
linux创建交换文件格式 浏览:567
配音试音文件扩展名mp3格式 浏览:523
安卓系统锁屏密码文件夹里 浏览:478
win8系统桌面文件 浏览:300
升级到win10后删除 浏览:17
linuxtotalcommander 浏览:165
传票翻打在电脑上下什么app 浏览:39
db2查看数据库字符集 浏览:449
小米私密文件移出后找不到 浏览:775
红底白色的心是什么app的标志 浏览:163
小冤家APP角色怎么变回家长 浏览:822
梦幻西游合宠模拟器网站是什么 浏览:420

友情链接