C S ingleLock

CSingleLock 没 有 基 类 。

一 个 CSingleLock 类 对 象 代 表 一 种 访 问 控 制 机 制 , 这 种 机 制 用 于 控 制 在 一 个 多线 程 程 序 中 对 一 个 资 源 的 访 问 。 为 了 使 用 同 步 类 CSemaphore , CMutex ,

CCriticalSection , 和 CEven t,

你 必 须 创 建 一 个 CSingleLock 或 CMultiLock 对 象 来 等 待 和 释 放 这 个 同 步 对 象 。当 你 只 需 要 每 次 等 待 一 个 对 象 时 , 可 以 使 用 CSingleLock 。 当 在 一 个 特 别 的 时候 你 可 以 使 用 多 个 对 象 时 , 可 以 使 用 CMultiLock 。

要 使 用 一 个 CSingleLock 对 象 , 在 被 控 制 资 源 的 类 中 的 一 个 成 员 函 数 内 部 调 用CSingleLock 的 构 造 函 数 。 然 后 调 用 ISLock 成 员 函 数 来 确 定 这 个 资 源 是 否 可 用 。如 果 资 源 是 可 用 的 , 则 继 续 该 成 员 函 数 的 其 余 部 分 。 如 果 资 源 不 能 使 用 , 可 以在 一 个 指 定 的 时 间 内 等 待 资 源 被 释 放 , 或 者 是 返 回 失 败 。 在 使 用 完 资 源 后 , 如果 CSingleLock 对 象 要 被 再 次 使 用 ,可 以 调 用 Unlock 函 数 ,或 者 销 毁 CSingleLock 对 象 。

CSingleLock 对 象 需 要 有 一 个 从 CSyncObject 派 生 的 对 象 存 在 。 这 通 常 是 一 个 被控 制 资 源 的 类 的 数 据 成 员 。

#include <afxmt.h>

请 参 阅 CMultiLock

CSingleLock 类 成 员

Construction

CsingleLock 构 造 一 个 CSingleLock 对 象

Methods

IsLocked 确 定 此 对 象 是 否 被 加 锁

Lock 等 待 一 个 同 步 对 象

Unlock 释 放 一 个 同 步 对 象

成 员 函 数

CSingleLock:: CSingleLock

CSingleLock( CSyncObject* pObjec t, BOOL bInitialLock = FALSE );

参 数

pObject

指 向 要 被 访 问 的 同 步 对 象 。 不 能 是 NULL 。

bInitialLock

指 示 是 否 要 在 最 初 尝 试 访 问 所 提 供 的 对 象 。

说 明

此 成 员 函 数 用 来 构 造 一 个 CSingleLock 对 象 。 通 常 是 从 被 控 制 资 源 的 一 个 访 问

成 员 函 数 中 来 调 用 这 个 函 数 。

CSingleLock::IsLocked

BOOL IsLocked( );

返 回 值

如 果 对 象 被 加 锁 则 返 回 非 零 值 ; 否 则 返 回 0 。

说 明

此 成 员 函 数 用 来 确 定 与 CSingleLock 对 象 相 关 的 对 象 是 否 没 有 发 信 号 ( 不 能 使用 ) 。

CSingleLock::Lock

BOOL Lock( DWORD dwTimeOut = INFINITE );

返 回 值

如 果 函 数 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

dwTimeOut

指 定 等 待 要 被 利 用 的 同 步 对 象 的 时 间 数 量 。 如 果 是 INFINITE , 则 Lock

等 待 直 到 该 对 象 在 返 回 之 前 可 用 。

说 明

此 成 员 函 数 用 来 获 取 对 由 同 步 对 象 控 制 的 资 源 的 访 问 , 这 个 访 问 要 提 供 给CSingleLock 构 造 函 数 。 如 果 同 步 对 象 是 可 用 的 , Lock 将 成 功 返 回 , 而 且 线 程拥 有 了 该 对 象 。 如 果 此 同 步 对 象 是 不 可 用 的 , 则 Lock 将 等 待 此 同 步 对 象 在dwTimeOut 参 数 指 定 的 时 间 内 变 为 可 用 。 如 果 此 同 步 对 象 在 指 定 的 时 间 内 没 有

变 为 可 用 的 , 则 Lock 返 回 失 败 。

CSingleLock::Unlock

BOOL Unlock( );

BOOL Unlock( LONG lCount, LPLONG lPrevCount = NULL );

返 回 值

如 果 函 数 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

L Count

要 释 放 的 访 问 数 目 。 必 须 要 大 于 0 。 如 果 指 定 的 数 量 要 导 致 对 象 的 计 数超 过 它 的 最 大 值 , 则 计 数 不 改 变 , 并 且 函 数 返 回 FALSE 。

L PrevCount

指 向 一 个 用 来 接 收 同 步 对 象 的 先 前 计 数 的 变 量 。 如 果 是 NULL , 则 不 返 回先 前 的 计 数 。

说 明

此 成 员 函 数 用 来 释 放 由 CSingleLock 拥 有 的 同 步 对 象 。 由 CSingleLock 的 析 构函 数 类 调 用 这 个 函 数 。

如 果 你 需 要 释 放 一 个 信 号 的 多 于 一 个 的 访 问 计 数 , 可 以 使 用 Unlock 的 第 二 种形 式 , 并 指 定 要 释 放 的 访 问 数 目 。