gpt4 book ai didi

c++ - 当 CComCriticalSection::Lock 可能返回 E_FAIL

转载 作者:行者123 更新时间:2023-11-30 02:26:16 27 4
gpt4 key购买 nike

MSDN(https://msdn.microsoft.com/en-us/library/04tsf4b5.aspx)说:

Return Value

Returns S_OK on success, E_OUTOFMEMORY or E_FAIL on failure.

获取锁可能会失败什么?

最佳答案

看起来它永远不会返回那个。对 E_FAILE_OUTOFMEMORY 的引用可能是方法返回 HRESULT 的标准注释。此方法可能会返回 HRESULT 以与其他方法保持一致和/或与其他 ATL 类兼容。

这是 vc140 (2017) 工具集中的 CComCriticalSection 的代码。回到 vc90 (2008) 之前的工具集具有类似的简单 Lock() 方法。 2008 年和 2017 年之间的唯一变化是添加了 SAL。属性 _Success__Acquires_lock_,它们没有任何功能影响(它们扩展为无)。我无法对 2008 年之前的工具集发表评论。

class CComCriticalSection
{
public:
CComCriticalSection() throw()
{
memset(&m_sec, 0, sizeof(CRITICAL_SECTION));
}

~CComCriticalSection()
{
}

_Success_(1) _Acquires_lock_(this->m_sec) HRESULT Lock() throw()
{
EnterCriticalSection(&m_sec);
return S_OK;
}
_Success_(1) _Releases_lock_(this->m_sec) HRESULT Unlock() throw()
{
LeaveCriticalSection(&m_sec);
return S_OK;
}
HRESULT Init() throw()
{
HRESULT hRes = S_OK;
if (!_AtlInitializeCriticalSectionEx(&m_sec, 0, 0))
{
hRes = HRESULT_FROM_WIN32(GetLastError());
}

return hRes;
}

HRESULT Term() throw()
{
DeleteCriticalSection(&m_sec);
return S_OK;
}
CRITICAL_SECTION m_sec;
};

关于c++ - 当 CComCriticalSection::Lock 可能返回 E_FAIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43003672/

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