CSingleLock
類別
代表多執行緒程式用來控制單一資源存取的存取控制機制。
語法
class CSingleLock
成員
公用建構函式
名稱 | 描述 |
---|---|
CSingleLock::CSingleLock |
建構 CSingleLock 物件。 |
公用方法
名稱 | 描述 |
---|---|
CSingleLock::IsLocked |
判斷物件是否已鎖定。 |
CSingleLock::Lock |
等候同步處理物件。 |
CSingleLock::Unlock |
釋放同步處理物件。 |
備註
CSingleLock
沒有基類。
若要使用同步處理類別CSemaphore
、 CMutex
、 和 CEvent
CCriticalSection
,您必須建立 CSingleLock
或 CMultiLock
物件來等候並釋放同步處理物件。 當您一次只需要等候一個物件時,請使用 CSingleLock
。 CMultiLock
當您在特定時間可以使用多個物件時,請使用 。
若要使用 CSingleLock
物件,請在受控制資源類別的成員函式內呼叫其建構函式。 然後呼叫 IsLocked
成員函式來判斷資源是否可用。 如果是,請繼續進行成員函式的其餘部分。 如果資源無法使用,請等候指定的時間量釋放資源,或傳回失敗。 使用資源完成之後,如果CSingleLock
物件要再次使用,或允許CSingleLock
終結物件,請呼叫 Unlock
函式。
CSingleLock
物件需要衍生自 CSyncObject
的物件存在。 這通常是受控制資源類別的數據成員。 如需如何使用CSingleLock
對象的詳細資訊,請參閱多線程:如何使用同步處理類別一文。
繼承階層架構
CSingleLock
需求
標頭: afxmt.h
CSingleLock::CSingleLock
建構 CSingleLock
物件。
explicit CSingleLock(
CSyncObject* pObject,
BOOL bInitialLock = FALSE);
參數
pObject
指向要存取的同步處理物件。 不能為 NULL
。
bInitialLock
指定是否一開始嘗試存取提供的物件。
備註
此函式通常會從受控制資源的存取成員函式內呼叫。
範例
// m_CritSection is a data member (of type CCriticalSection)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_CritSection) with
// our CSingleLock object.
CSingleLock singleLock(&m_CritSection);
singleLock.Lock(); // Attempt to lock the shared resource
if (singleLock.IsLocked()) // Resource has been locked
{
//...use the shared resource...
// Now that we are finished,
// unlock the resource for others.
singleLock.Unlock();
}
CSingleLock::IsLocked
判斷與對象相關聯的 CSingleLock
物件是否為未對齊(無法使用)。
BOOL IsLocked();
傳回值
如果對象已鎖定,則為非零;否則為 0。
範例
// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_Mutex) with
// our CSingleLock object.
CSingleLock singleLock(&m_Mutex);
// Attempt to lock the shared resource
singleLock.Lock(100); // Wait 100 ms...
// Has the resource been successfully locked?
if (singleLock.IsLocked())
{
// We were able to lock the resource;
// we may now work with the data associated with the mutex...
// Now that we are finished, unlock the resource for others.
singleLock.Unlock();
}
CSingleLock::Lock
呼叫此函式,以存取提供給 CSingleLock
建構函式之同步處理物件所控制的資源。
BOOL Lock(DWORD dwTimeOut = INFINITE);
參數
dwTimeOut
指定等候同步處理物件可用的時間量(已發出訊號)。 如果 INFINITE
為 , Lock
則會等到對象發出訊號後再傳回。
傳回值
如果函式成功,則為非零;否則為 0。
備註
如果已發出同步處理物件的訊號, Lock
將會成功傳回 ,且線程現在擁有物件。 如果同步處理物件未對齊(無法使用), Lock
則會等候同步處理物件收到最多在 參數中指定的 dwTimeOut
毫秒數的訊號。 如果同步處理物件未在指定的時間量中收到訊號, Lock
則傳回失敗。
範例
// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_Mutex) with
// our CSingleLock object.
CSingleLock singleLock(&m_Mutex);
// Attempt to lock the shared resource
if (singleLock.Lock(100)) // Wait 100 ms...
{
// We were able to lock the resource;
// we may now work with the data associated with the mutex...
// Now that we are finished, unlock the resource for others.
singleLock.Unlock();
}
CSingleLock::Unlock
釋放 所擁有的 CSingleLock
同步處理物件。
BOOL Unlock();
BOOL Unlock(
LONG lCount,
LPLONG lPrevCount = NULL);
參數
lCount
要發行的存取次數。 必須大於 0。 如果指定的數量會導致物件的計數超過其最大值,則計數不會變更,且函式會傳 FALSE
回 。
lPrevCount
指向要接收同步處理物件先前計數的變數。 如果 NULL
為 ,則不會傳回先前的計數。
傳回值
如果函式成功,則為非零;否則為 0。
備註
此函式是由 CSingleLock
的解構函式所呼叫。
如果您需要釋放號誌的多個存取計數,請使用 的第二種形式 Unlock
,並指定要釋放的存取次數。
範例
// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_Mutex) with
// our CSingleLock object.
CSingleLock singleLock(&m_Mutex);
// Attempt to lock the shared resource
if (singleLock.Lock(100)) // Wait 100 ms...
{
// We were able to lock the resource;
// we may now work with the data associated with the mutex...
// Now that we are finished, unlock the resource for others.
singleLock.Unlock();
}