我試圖用我自己的代MFC的CSingleLock執行結束,但我現在已經在Windows XP上的僵局,我沒有在Windows 7和我沒有在任何操作系統與MFC的CSingleLock,除了尋找到每一個鎖定&解鎖在我的應用程序,什麼是從我實現丟失:CSingleLock執行工作正常的Windows 7,但在Win XP的死鎖
class CCriticalSection
{
CRITICAL_SECTION m_cs;
public:
CCriticalSection()
{
InitializeCriticalSection(&m_cs);
}
~CCriticalSection()
{
DeleteCriticalSection(&m_cs);
}
void Lock()
{
EnterCriticalSection(&m_cs);
}
BOOL TryLock()
{
return TryEnterCriticalSection(&m_cs);
}
void Unlock()
{
if(m_cs.LockCount > -1)
LeaveCriticalSection(&m_cs);
}
};
和
#include "CCriticalSection.h"
class CSingleLock {
CCriticalSection *m_cs;
public:
CSingleLock(CCriticalSection* cs = NULL, bool bLock = false)
{
m_cs = cs;
if(m_cs != NULL)
{
if(bLock)
m_cs->Lock();
}
}
void Unlock()
{
if(m_cs != NULL)
m_cs->Unlock();
}
void Lock()
{
if(m_cs != NULL)
m_cs->Lock();
}
~CSingleLock()
{
if(m_cs != NULL)
m_cs->Unlock();
}
};
'1'任何不使用ATL/MFC類的原因['CComAutoCriticalSection'](http://msdn.microsoft.com/zh-cn/library/50yhb8t7%28v=vs.90%29.aspx)和朋友? '2',第二類是不準確的,例如它可能發生你解鎖沒有鎖定。方便的助手類不是以這種方式設計的。 –
@RomanR。如果我在非商業項目上工作,我會避免使用ATL/MFC,因爲他們沒有使用VS Express。 (他們從來沒有使用過,無論如何,我沒有在2012年VS檢查) – arx
@arx:這個問題被標記[標籤:MFC]和曾經問[標籤:ATL]海報在過去的問題。 –