作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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_FAIL
和 E_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/
MSDN(https://msdn.microsoft.com/en-us/library/04tsf4b5.aspx)说: Return Value Returns S_OK on success,
我是一名优秀的程序员,十分优秀!