gpt4 book ai didi

c++ - 我需要调用 CloseHandle 吗?

转载 作者:太空狗 更新时间:2023-10-29 20:56:55 24 4
gpt4 key购买 nike

我有创建线程并在程序完成时使用 CloseHandle 关闭线程的代码。

int main()
{
....

HANDLE hth1;
unsigned uiThread1ID;

hth1 = (HANDLE)_beginthreadex( NULL, // security
0, // stack size
ThreadX::ThreadStaticEntryPoint,
o1, // arg list
CREATE_SUSPENDED, // so we can later call ResumeThread()
&uiThread1ID );
....
CloseHandle( hth1 );

....

}

但为什么我需要关闭句柄呢?如果我不这样做会怎样?

最佳答案

But why do I need to close handle at all?

句柄是占用内核和用户空间内存的有限资源。保持句柄事件不仅需要一个整数值的存储空间,还意味着内核必须保留线程信息(例如用户时间、内核时间、线程 ID、退出代码),并且它不能回收线程 ID,因为您可以使用该句柄查询它。
因此,最佳做法是在不再需要时关闭句柄。

这是您根据 API 契约(Contract)要做的事情(当然您可以违反该契约(Contract))。

What will happens if I will not do so?

嗯,老实说……没什么。您将泄漏该句柄,但对于一个句柄,影响将无法衡量。当您的进程退出时,Windows 将关闭该句柄。

不过,在正常情况下,您应该关闭不再需要的句柄,就像释放您分配的内存一样(即使操作系统也会在您的进程退出时释放它)。

尽管不显式释放资源甚至可能被认为是一种“优化”,但为了拥有一个正确的程序,应该始终这样做。正确第一,优化第二。
此外,您越早释放资源(无论它有多小),它就越早可供系统重新使用。

关于c++ - 我需要调用 CloseHandle 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32337336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com