起源<o:p></o:p>
lock pattern是Delphi中 TStrings数据更新控制的基础。在本段后面将例举部分Tstrings、TstringList的代码
目的<o:p></o:p>
为类提供一个临时的访问锁控制机制
动机<o:p></o:p>
我们经常发现一个对象经常调度一个返回更改结果的通知。被调度的对象必须控制其内部状态,以同步对象数据。如果同时对一个对象进行多个更改操作,将会产生多个通知并产生一个并发的操作。此时在你的类中加入一个lock pattern的模式,从面提供一个临时锁控制机。从而避免不必要的通知。
我们通过Tbag类来学习:<o:p></o:p>
类TBag提供了collection的行为。每次更改,Tbag将调度OnChange事件。如果我们一次对Tbag加入多个对象,你将得到多个更改通知。一个图形组件可能会进行多次刷新操作。引入lock pattern后,在加入对象前打开Tbag的锁,操作完后关闭锁。如此,我将得到单一的更改通知。更好的办法是加入一个标志,比如:FUpdating
应用
以下是Tbag类部分代码: (仅显示部分相关代码)
<o:p></o:p>
type
TBag = class (TObject)
private
FLockCnt: Integer;
protected
function Locked: Boolean;
procedure SetLocking(Updating: Boolean);
public
procedure Lock;
procedure UnLock;
end;
<o:p></o:p>
implementation
<o:p></o:p>
procedure TBag.Lock;
begin
Inc(FLockCnt);
if FLockCnt = 1 then SetLocking(False);
end;
<o:p></o:p>
function TBag.Locked: Boolean;
begin
Result := (FLockCnt <> 0);
end;
<o:p></o:p>
procedure TBag.SetLocking(Updating: Boolean);
begin
end;
<o:p></o:p>
procedure TBag.UnLock;
begin
Dec(FLockCnt);
if FLockCnt = 0 then SetLocking(True);
end;
<o:p></o:p>
Tbag说明:
· FlockCnt保存锁机制的内部状态。FLockCnt = 0表示其处于非锁状态,其它值都表示其处于锁定状态。类Tbag通过Lock与Unlock来设置它的值。
· Lock与Unlock提供了锁的接口,每一次调用都将引起锁的关态变化,并调用SetLocking方法。
· SetLocking方法中有一个Updating的参数,Lock调用的参数为False,而Unlock调用的参数为True。对了,你可以在方法中插入一引起其它的代码,分配给它更多的操作表示它的锁状态的更改。.
· Locked 返回类的锁状态。
注意:Lock、 Unlock必须同时使用,从而避免类保持在锁状态。明智的方法是使用try..finally块来保持Lock、 Unlock的同时调用。
<o:p></o:p>
一个典型的应用例子:
<o:p></o:p>
procedure TBag.Add(Item: Pointer);
begin
{ Add Item to internal structure }
Change;
end
<o:p></o:p>
procedure TBag.AddItems(Items: TList);
begin
Lock;
{ Add multiple items }
try
for I := 0 to Items.Count - 1 do
Add(Items[I]);
finally
{ use try..finally to make sure Unlock is called }
Unlock;
end;
end;
<o:p></o:p>
procedure TBag.Change;
begin
if not Locked then
if Assigned(FOnChange) then FOnChange(Self);
end;
<o:p></o:p>
procedure TBag.SetLocking(Updating: Boolean);
begin
if Updating then { Bag has become unlocked }
Change;
end;
分享到:
相关推荐
最新版的android lockpattern
这个是关于开源项目android-lockpattern为依赖而实现的图案(九宫格)解锁的实现方式,具体请看博文:http://blog.csdn.net/jan_s/article/details/43952521
http://blog.csdn.net/jan_s/article/details/43952521
LockPattern Description Imitate Alipay gesture password 仿支付宝手势密码解锁 Starting 创建手势密码可以查看 CreateGestureActivity.java 文件. 登陆验证手势密码可以看 GestureLoginActivity.java 文件. ...
版本:3.2.1 beta(46)
android-lockpattern_图案解锁_src.rar
LockPattern 最好用的锁屏 高仿qq,支付宝
android-lockpattern_图案解锁_src.7z
android-lockpattern 版本:3.1.1 测试版(#44) 请随时与我们联系: 电子邮件: haibison.apps[at]gmail.com 简而言之,无论我们是否知道,您都可以在您的闭源/商业应用程序中使用这个库。 希望你喜欢它 :-) ...
android-lockpattern 这是托管在以下位置的 android-lockpattern 库的 AndroidStudio/Gradle 端口: : 如何使用 设置Android SDK路径环境变量 $ export ANDROID_HOME= ' path to android sdk ' 推送到您的本地 ...
源码参考,欢迎下载
这个库为开发人员提供了将锁模式保护轻松集成到他的android应用程序中的可能性。有很多项目可以定制。
cordova插件,在移动开发中快捷实现图案解锁,当前只支持安卓系统。
仿QQ九宫格手势解锁,应用启动点击创建手势密码首先会出现一个动画的提示,点击确定以后才可以设置九宫格密码
采用AndroidStudio开发,包含Android Lock Pattern 源码,在项目中可以直接使用,AS版本2.2.3,工具版本25.0.2
源码参考,欢迎下载
LockPattern Android九宫格图案解锁 刚进入程序的时候,会让用户设置一个密码,设置完毕后,程序会自动退出。 再次进入程序的时候,就需要用户来画线解锁之前的图案了,当解锁成功的时候会自动跳到设置图案的界面。 ...
lock pattern介绍: 实现九宫格锁屏(lock pattern)功能。
九宫格锁屏lock pattern功能源码,源码lock pattern,该功能实现我们比较熟悉一种九宫格锁屏(lock pattern)功能的,并且源码也比较详细的,大家可以学习看看,该源码由源码天堂android源码频道整理上传,。
android-lockpattern 许可证: 版本: 3.2.1 beta (#46) 项目页面: : 演示: : 对于开发人员: 、 。 ——特征要求:Android 2.1+(API 7+)。 支持:Eclipse IDE; Android Studio(支持处于测试阶段)。 没有依赖...