分享方式:


CSingleLock 類別

代表多執行緒程式用來控制單一資源存取的存取控制機制。

語法

class CSingleLock

成員

公用建構函式

名稱 描述
CSingleLock::CSingleLock 建構 CSingleLock 物件。

公用方法

名稱 描述
CSingleLock::IsLocked 判斷物件是否已鎖定。
CSingleLock::Lock 等候同步處理物件。
CSingleLock::Unlock 釋放同步處理物件。

備註

CSingleLock 沒有基類。

若要使用同步處理類別CSemaphoreCMutex、 和 CEventCCriticalSection,您必須建立 CSingleLockCMultiLock 物件來等候並釋放同步處理物件。 當您一次只需要等候一個物件時,請使用 CSingleLockCMultiLock當您在特定時間可以使用多個物件時,請使用 。

若要使用 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();
}

另請參閱

階層架構圖表
CMultiLock