打电话给谁是无效的关闭手(句柄)是安全的吗?

Is it safe to call CloseHandle (handle) who handle is NULL

本文关键字:句柄 安全 无效 打电话      更新时间:2023-10-16

删除空指针是安全的。

int* p = NULL;
delete p;         // ok, secure

handles是什么?

HANDLE h = NULL;
CloseHandle(h);   // allowed?

我正在阅读MSDN,但仍然不确定。它说明了error_invalid_handle,但它是6升,而不是null。

我来自一个班级的灾难,这给了我C6387警告错误

if (m_hThread)
    WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread);    // warninig C6387
m_hThread = NULL;

no。您不得在空手柄上调用CloseHandle。查看该论点的文档。它说:

hobject [在]开放对象的有效句柄。

null不是开放对象的手柄。

您获得C6387的事实正好是因为您将"可能无效"的句柄传递给CloseHandle

您必须将代码写为:

if (m_hThread) {
    WaitForSingleObject(m_hThread, INFINITE);
    CloseHandle(m_hThread);
}

(在此之后,没有任何点设置m_hthread null-它将在很短的时间内停止)。