CSingleLock
クラス
マルチスレッド プログラムで 1 つのリソースのアクセス制御に使うアクセス コントロール機構を表します。
構文
class CSingleLock
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CSingleLock::CSingleLock |
CSingleLock オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CSingleLock::IsLocked |
オブジェクトがロックされているかどうかを判断します。 |
CSingleLock::Lock |
同期オブジェクトを待機します。 |
CSingleLock::Unlock |
同期オブジェクトを解放します。 |
解説
CSingleLock
には基底クラスはありません。
同期クラス CSemaphore
、、CMutex
、CCriticalSection
およびCEvent
を使用するには、同期オブジェクトを待機して解放するオブジェクトをCSingleLock
CMultiLock
作成する必要があります。 一度に 1 つのオブジェクトだけを待機する必要がある場合に使用 CSingleLock
します。 CMultiLock
特定の時点で使用できるオブジェクトが複数ある場合に使用します。
オブジェクトを CSingleLock
使用するには、制御されたリソースのクラスのメンバー関数内でそのコンストラクターを呼び出します。 次に、メンバー関数を IsLocked
呼び出して、リソースが使用可能かどうかを判断します。 その場合は、メンバー関数の reメインder に進みます。 リソースが使用できない場合は、リソースが解放されるまで指定した時間待機するか、エラーを返します。 リソースの使用が完了したら、オブジェクトを Unlock
再度使用する場合は関数を CSingleLock
呼び出すか、オブジェクトの CSingleLock
破棄を許可します。
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 以外。それ以外の場合は 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
同期オブジェクトが使用可能になるまで待機する時間 (シグナル通知) を指定します。 if INFINITE
は、 Lock
オブジェクトが通知されるまで待機してから戻ります。
戻り値
関数が成功した場合は 0 以外。それ以外の場合は 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 以外。それ以外の場合は 0。
解説
この関数は、's デストラクター' によって CSingleLock
呼び出されます。
セマフォの複数のアクセス数を解放する必要がある場合は、2 番目の形式を 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();
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示