用CreateThread建立线程得到的句柄需要关闭吗?

时间:2022-06-29 22:47:34
我有一个多线程应用程序,是直接调用CreateThread建立线程的。我对得到的句柄没有进行任何处理,但最后会出现:1816 Not enough quota is available to process this command 和8 Not enough storage is available to process this command 错误。似乎CreateThread并没有要求我们关闭句柄,用CreateThread建立线程得到的句柄到底要不要关闭?

7 个解决方案

#1


当然要,除非你的进程结束了。否则你的线程对象上的引用计数器不会归0,线程对象就不会被内核销毁。

#2


试试把句柄关掉,然后看还有没有这样的错误。不过应该没什么关系的,句柄不过是核心对象的一个引用罢了。你的问题应该不出在关不关句柄上

#3


什么时候关?建立线程后马上就关吗?还是在建立的线程内关?

#4


一定要关闭。我曾经试过的,不关闭的话会造成资源泄漏。
事实上,如果你的程序经常频繁启动和关闭线程,对性能是有影响的。建议你修改一下算法,用预先创建线程等方法处理,而不要频繁启动关闭线程。

#5


建立线程后马上就关!

#6


在哪里关闭都可以。事实上,提供这个句炳的作用主要是给你一些对它操作的手段。
如果它对你没有用处,最方便的是
CloseHandle(CreateThread(...));
可以将以上调用定义成一个宏或内联函数。

#7


使用完毕后当然要关闭!
CloseHandle(handle);
or.
handle.close();

#1


当然要,除非你的进程结束了。否则你的线程对象上的引用计数器不会归0,线程对象就不会被内核销毁。

#2


试试把句柄关掉,然后看还有没有这样的错误。不过应该没什么关系的,句柄不过是核心对象的一个引用罢了。你的问题应该不出在关不关句柄上

#3


什么时候关?建立线程后马上就关吗?还是在建立的线程内关?

#4


一定要关闭。我曾经试过的,不关闭的话会造成资源泄漏。
事实上,如果你的程序经常频繁启动和关闭线程,对性能是有影响的。建议你修改一下算法,用预先创建线程等方法处理,而不要频繁启动关闭线程。

#5


建立线程后马上就关!

#6


在哪里关闭都可以。事实上,提供这个句炳的作用主要是给你一些对它操作的手段。
如果它对你没有用处,最方便的是
CloseHandle(CreateThread(...));
可以将以上调用定义成一个宏或内联函数。

#7


使用完毕后当然要关闭!
CloseHandle(handle);
or.
handle.close();