如果在同一类中有以下两种方法。
bool CSettings::GetDelayTimer() { return m_iTimerDelay; } void CSettings::SetDelayTimer(int iTimerdelay) { m_iTimerDelay = iTimerdelay; }
为了同步上面的方法,我创build了以下locking/解锁方法。
void CSettings::Lock() { DWORD dwRet = WaitForSingleObject(m_hSettingsLock, INFINITE); if( dwRet == WAIT_OBJECT_0) return; } void CSettings::UnLock() { ReleaseMutex(m_hSettingsLock); }
如何使用locking/解锁来同步这些getter / setter方法。 如果我在getter方法中使用lock,我不会得到解锁的机会,因为它会在解锁之前返回。 我的意思是说:Lock(); 返回m_iTimerDelay; 开锁(); 它会工作吗? 将locking/解除locking应用于setter不是问题。
任何想法来同步这些方法?
问候,Khurram。
使用RAII 。 创建一个对象,其构造函数获取该锁并且其析构函数释放它。 那么你可以做:
{ ScopedLock f(m_hSettingsLock); return m_iTimerDelay; }
让ScopedLock::~ScopedLock
释放锁。
或者,最可能的劣等:
{ Lock(); bool ret = m_iTimerDelay; Unlock(); return ret; }
请注意,在这两种情况下,返回的值可能是陈旧的。