CCriticalSection::Lock
クリティカル セクション オブジェクトにアクセスするときには、このメンバー関数を呼び出します。
BOOL Lock( );
BOOL Lock(
DWORD dwTimeout
);
パラメーター
- dwTimeout
Lock は、このパラメーター値を無視します。
戻り値
関数が正常に終了した場合は、; それ以外の場合は 0。
解説
Lock は、クリティカル セクション オブジェクトがシグナル状態になるまで戻らないブロッキング呼び出しです (使用可能になります)。
一定待ち時間が必要な場合は、CCriticalSection のオブジェクトではなく CMutex オブジェクトを使用できます。
Lock が必要なシステム メモリを割り当てる (CMemoryException 型の) メモリ不足の例外が自動的にスローされます。
使用例
この例では、共有リソース ( _strShared の静的オブジェクト) へのアクセスを制御します CCriticalSection の共有オブジェクトを使用して入れ子のクリティカル セクションの方法を示します。SomeMethod 関数は安全な方法で共有リソースを更新することを示します。
//Definition of critical section class
class CMyCritSectClass
{
static CString _strShared; //shared resource
static CCriticalSection _critSect;
public:
CMyCritSectClass(void) {}
~CMyCritSectClass(void) {}
void SomeMethod(void); //locks, modifies, and unlocks shared resource
};
//Declaration of static members and SomeMethod
CString CMyCritSectClass::_strShared;
CCriticalSection CMyCritSectClass::_critSect;
void CMyCritSectClass::SomeMethod()
{
_critSect.Lock();
if (_strShared == "")
_strShared = "<text>";
_critSect.Unlock();
}
必要条件
Header: afxmt.h