- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将应用程序从 VC6 升级到 VS2010(旧版代码)。该应用程序在 VC6 中正常运行,但在将项目转换为 VS2010 后,我遇到了一些问题。退出应用程序时,程序会在尝试锁定进入临界区时中断。锁定计数通常从 -1(未锁定)到 -2(锁定)交替变化,但就在程序崩溃之前,锁定计数为 0。
g_RenderTargetCriticalSection.Lock();// Breaks here
if (g_RenderTargets.Lookup(this, pRenderTarget))
{
ASSERT_VALID(pRenderTarget);
g_RenderTargets.RemoveKey(this);
delete pRenderTarget;
}
g_RenderTargetCriticalSection.Unlock();
这是 CCriticalSection::Lock()
函数,其中 ::EnterCriticalSection(&m_sect);
失败。我发现很奇怪,在失败时,锁定计数从 0 变为 -4??
_AFXMT_INLINE BOOL (::CCriticalSection::Lock())
{
::EnterCriticalSection(&m_sect);
return TRUE;
}
如果有人遇到过类似的事情,将不胜感激。提前致谢。
最佳答案
注释表明这是一个文件范围对象析构函数顺序问题。有多种方法可以解决这个问题。由于我还没有看到其余代码,因此很难提供具体建议,但一个想法是将 CS 更改为存在于 shared_ptr
中,并让您的 CWnd 保留一个拷贝,这样它就不会不要过早销毁。例如:
std::shared_ptr<CCriticalSection> g_renderTargetCriticalSection(new CCriticalSection());
然后在你的窗口类中:
class CMyWindow : public CWnd
{
private:
std::shared_ptr<CCriticalSection> m_renderTargetCriticalSection;
public:
CMyWindow()
: m_renderTargetCriticalSection(g_renderTargetCriticalSection)
{
// ...
}
~CMyWindow()
{
// guaranteed to still be valid since our shared_ptr is keeping it alive
CSingleLock lock(m_renderTargetCriticalSection.get(), TRUE);
// ...
}
// ...
};
关于c++ - 应用程序在 CCriticalSection::Lock 上中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23410470/
我们是 MFC 的几个新手,我们正在构建一个多线程应用程序。我们在 URL 中看到警告我们不要使用 CCriticalSection 的文章,因为它的实现被破坏了。我们很想知道是否有人有使用 CCri
这段代码有什么区别: ::EnterCriticalSection( &m_CriticalSection ); //... ::LeaveCriticalSection( &m_CriticalSe
在 MFC 应用程序中,我有 2 个线程访问我的数据,所以我使用 CCriticalSection Lock 和 Unlock 来保护我的数据不被 2 个线程同时访问。 从其中一个线程我需要锁定我的数
我正在将应用程序从 VC6 升级到 VS2010(旧版代码)。该应用程序在 VC6 中正常运行,但在将项目转换为 VS2010 后,我遇到了一些问题。退出应用程序时,程序会在尝试锁定进入临界区时中断。
这是场景。我有多个处理器线程读取一个值。只允许 1 个线程写入该值。由于设置的缘故,自然而然,在写入过程中没有人可以读取。因此,当 1 个人正在写入新值时,CCriticalSection 将锁定所有
为此,我已经尝试修复/寻找一个小时左右的解决方案。基本上我有: CCriticalSection pCS; 在类声明中,然后我像这样使用 CSingleLock: CSingleLock pSL(&p
我必须使用 MFC/C++ 编写一个简单的线程程序来进行 uni 分配。 我有一个简单的场景,我有一个工作线程,它执行一个函数: UINT createSchedules(LPVOID param)
我是一名优秀的程序员,十分优秀!