设计模式、用Delphi描述-->Lock pattern

lockpattern手势密码解锁 主要参考了https://github.com/sym900728/LockPattern,谢谢作者! 下载依赖项目 首先在上面网址下载整个项目到本地,我们需要将项目中的lockpattern模块作为module依赖导入到我们项目中,gradle中添加: implementation project(':lockpattern') 接下来需要把 CreateGestureActivity... 阅读详情

 

Lock pattern

起源

lock pattern是Delphi中 TStrings数据更新控制的基础。在本段后面将例举部分Tstrings、TstringList的代码

目的

为类提供一个临时的访问锁控制机制

动机

我们经常发现一个对象经常调度一个返回更改结果的通知。被调度的对象必须控制其内部状态,以同步对象数据。如果同时对一个对象进行多个更改操作,将会产生多个通知并产生一个并发的操作。此时在你的类中加入一个lock pattern的模式,从面提供一个临时锁控制机。从而避免不必要的通知。

我们通过Tbag类来学习:

类TBag提供了collection的行为。每次更改,Tbag将调度OnChange事件。如果我们一次对Tbag加入多个对象,你将得到多个更改通知。一个图形组件可能会进行多次刷新操作。引入lock pattern后,在加入对象前打开Tbag的锁,操作完后关闭锁。如此,我将得到单一的更改通知。更好的办法是加入一个标志,比如:FUpdating

应用

以下是Tbag类部分代码: (仅显示部分相关代码)

 

type

  TBag = class (TObject)

  private

    FLockCnt: Integer;

  protected

    function Locked: Boolean;

    procedure SetLocking(Updating: Boolean);

  public

    procedure Lock;

    procedure UnLock;

  end;

 

implementation

 

procedure TBag.Lock;

begin

  Inc(FLockCnt);

  if FLockCnt = 1 then SetLocking(False);

end;

 

function TBag.Locked: Boolean;

begin

  Result := (FLockCnt <> 0);

end;

 

procedure TBag.SetLocking(Updating: Boolean);

begin

end;

 

procedure TBag.UnLock;

begin

  Dec(FLockCnt);

  if FLockCnt = 0 then SetLocking(True);

end;

 

Tbag说明:

·      FlockCnt保存锁机制的内部状态。FLockCnt = 0表示其处于非锁状态,其它值都表示其处于锁定状态。类Tbag通过Lock与Unlock来设置它的值。

·      Lock与Unlock提供了锁的接口,每一次调用都将引起锁的关态变化,并调用SetLocking方法。

·      SetLocking方法中有一个Updating的参数,Lock调用的参数为False,而Unlock调用的参数为True。对了,你可以在方法中插入一引起其它的代码,分配给它更多的操作表示它的锁状态的更改。.

·      Locked 返回类的锁状态。

注意:Lock、 Unlock必须同时使用,从而避免类保持在锁状态。明智的方法是使用try..finally块来保持Lock、 Unlock的同时调用。

 

一个典型的应用例子:

 

procedure TBag.Add(Item: Pointer);

begin

  { Add Item to internal structure }

  Change;

end

 

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;

 

procedure TBag.Change;

begin

  if not Locked then

    if Assigned(FOnChange) then FOnChange(Self);

end;

 

procedure TBag.SetLocking(Updating: Boolean);

begin

  if Updating then { Bag has become unlocked }

    Change;

end;

Delphi实例:TString、TstringList

TStrings = class(TPersistent)

  private

FUpdateCount: Integer;

  Protected

procedure Exchange(Index1, Index2: Integer); virtual;

procedure SetUpdateState(Updating: Boolean); virtual;

public

  procedure BeginUpdate;

  procedure EndUpdate;

procedure Changed; virtual;

       procedure Changing; virtual;

delphi之多线程编程(一) <br />本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅。所有代码均亲自测试 delphi7下测试有效。图片均为自己制作。<br /><br />多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以仅仅是看上去会一些,明白了2+2的时候,其实我还不知道1+1。<br /><br />开始本应该是一篇洋洋洒洒的文字, 不过我还是提倡先做起来, 在尝试中去理解.<br />先试试这个:<br /> <br />procedure TForm1.Button1Click(Sen 阅读详情

相关推荐

[倾情原创] 锁·二则——lock关键字详解

法律声明:本文章受到知识产权法保护,任何单位或个人若需要转载此文,必需保证文章的完整性(未经作者许可的任何删节或改动将视为侵权行为)。文章出处请务必注明优快云以保障网站的权益,文章作者姓名请务必保留,并向bladey@tom.com发送邮件,标明文章位置及用途。转载时请将此法律声明一并转载,谢谢!锁·二则作  者:刘铁猛日  期:2005-12-25关键字:lock 多线程 同步小序锁者,loc

水之真谛 5855

delphi 中几种多线程操作方式

因为使用 TThread 建立线程时会同时分配更多资源(譬如你自定义的成员、还有它的祖先类(TObject)分配的资源等等), 如果用 ExitThread 给草草退出了, 这些资源将得不到释放而导致内存泄露. 尽管 Delphi 提供了 EndThread(其内部调用 ExitThread), 这也不需要我们手动操作(假如非要手动操作也是件很麻烦的事情, 因为很多时候你不知道线程是什么时候执行完毕的).线程在等待时, 其中的计数也还在增加. 这也就是说: 现在并没有去处理线程的同步;

5817

【Alluxio】文件系统锁模型之LockPattern详解

【Alluxio】文件系统锁模型之LockPattern详解

LifeIsGood 262

ABAP 锁对象与加锁机制(程序锁)

SAP锁机制 一、SAP为什么要设置锁: 1,保持数据的一致性 如果几个用户要访问同样的资源,需要找到一种同步访问的方法去保持数据的一致性。比如说,在航班预订系 统中,需要检查还有没有空座位,当检查的时候,你不想别人修改重要的数据(空座位的数量)。 2,仅仅用Database锁是不够的 数据库管理系统物理锁定了要修改的行记录,其他用户要等到数据库锁释放才能访问这个记录。 在SAP系统中,当一个新...

王小磊 8013

ExeLock 文件加密、锁定器Delphi源代码.rar

ExeLock 文件加密、锁定器Delphi源代码,直接编译项目组就可全部编译所属的二个子程序组。对EXE文件进行加密,并设定密码,界面友好。 烈火小编提示:因本程序对EXE内核操作,帮不少杀毒软件会报毒,如果不放心请不要下载。

LockPattern 最好用的锁屏 高仿qq,支付宝

LockPattern 最好用的锁屏 高仿qq,支付宝

DelPhi LockWindowUpdate的函数的用法

<br />Application.ProcessMessages;<br /> LockWindowUpdate(Self.Handle);  //锁住当前窗口<br />LockWindowUpdate(0)//解除锁定窗口<br /> <br />LockWindowUpdate不但闪烁,而且有可能引起桌面闪烁。因为LockWindowUpdate并不忽略消息,只是暂时不响应,所以有可能积聚多个重画消息,并在使用LockWindowUpdate(0)之后依次响应。<br />而使用SendMessag

zhangzhifeng886的专栏 1584

SAP FICO 银企直联实战:从配置到异常处理的全流程解析

本文详细解析了SAP FICO银企直联的实战配置与异常处理全流程,涵盖银行主数据搭建、支付类配置、银行接口适配等关键步骤。通过实际案例分享,帮助用户掌握实时付款、余额监控和自动对账等核心功能,提升企业财务效率与安全性。特别针对常见问题如凭证重复付款、前置机UUID冲突等提供了实用解决方案。

weixin_29215815的博客 663

TStringList 常用操作

TStringList 常用操作 //TStringList 常用方法与属性:var List: TStringList; i: Integer;begin List := TStringList.Create; List.Add('Strings1');...

394

(超详细)Scala环境搭建(scala-2.12.15、IDEA2021.1.3)

Scala环境搭建(scala-2.12.15、IDEA2021.1.3) JunLeon——go big or go home 目录 Scala环境搭建(scala-2.12.15、IDEA2021.1.3) 一、Scala概述 1、什么是Scala? 2、Scala发展史 3、Scala与Java的关系 二、Scala环境搭建 1、环境准备 2、Scala安装与配置环境变量 3、验证Scala 三、编写第一个Scala程序 1、使用IDEA创建maven工程 2、.

JunLeon的博客 3万+

基于单目视觉的四旋翼定点降落——如何通过mavros控制pixhawk(二)

    一直拖了这么久没有更新,怪我太懒啦~~~ 今天要特别感谢舒仔仔同学,我的好队友帮我写了这篇博文。这篇文章主要讲了如何通过mavros来控制pixhawk。硬件逻辑是这样子,我们先搞一个odroid(土豪上TX2),再用usb线将odroid与pixhawk连接。所以,odroid发送控制指令来控制pixhawk飞行。pixhawk与外界的通信协议是mavlink。ROS下面有个包叫mavr...

zhengyuxin0507的博客 1万+

设计模式、用Delphi描述-->Lock pattern (转)

设计模式、用Delphi描述--&gtLock pattern (转)[@more@] Lock pattern 起源XML:namespace prefix = o ns = "urn:schemas-micro...

cuiji1279的博客 80

AutoDL跑yolo

由于博主在AutoDL的JupyterLab的终端直接上传ZIp文件要么老是再上传中被中断,要么就是上传后使用unzip指令解压显示“找不到”,作为纯小白的我实在太难了!这个文件列出了一个 Python 项目所需的所有依赖包及其精确的版本号。这个文件是 Python 项目中常见的一种方式,用于确保项目在不同环境中都能以相同的依赖包配置运行。3.进入JupyterLab,在文件夹目录中找到上传的文件夹,右键点击“复制路径”。然后在终端中输入以下指令进行切换到该文件夹路径。9.安装成功后开始输入指令开跑!

m0_73804659的博客 1206

delphi TStringList 遍历操作

delphi TStringList 遍历操作

zhangxiaonanwin的专栏 1万+

【Linux】U盘配置Ubuntu系统 ——(Win10+Ubuntu20.04)双系统安装教程

Ubuntu系统安装

WS_Change的博客 4331

浏览器主页被2345劫持简单处理方法

本人比较常用的浏览器是IE和Chrome IE: 将网址修改为https://www.baidu.com 应用-确定-重新打开IE浏览器 或者win+r运行regedit打开注册表找到这个值   HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下  和HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main这个下面的StartPage ...

A soul tortured by desire 2万+

多线程(六) 死锁和Lock锁

死锁 同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免就避免掉。 synchronzied(A锁){ synchronized(B锁){ } } 我们进行下死锁情况的代码演示: 定义锁对象类 publicclassMyLoc...

qq_41781316的博客 493

ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?

在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。

晏长街的博客 5948

线程同步之Lock对象的使用

第一印象,C#关于线程同步的东西好多,保持了C#一贯的大杂烩和四不象风格(Java/Delphi)。临界区跟Java差不多只不过关键字用lock替代了synchronized,然后又用Moniter的Wait/Pulse取代了Object的Wait/Notify,另外又搞出来几个Event……让人甚是不明了。不管那么多,一个一个来吧。 临界区(Critical Section)  是一段在同一时候只被一个线程进入/执行的代码。为啥要有这个东西?是因为这段代码访问了“临界资源”,而这种资源只能同时被互斥地访问

betsyfeng的专栏 838

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)

俯视角射击游戏)是一类以俯视视角进行游戏展示的射击游戏。在这种游戏中,玩家控制着一个角色或载具,从俯视的角度上方观察游戏世界,并与敌人进行战斗。这种视角使玩家能够有更好的全局观察和策略性,同时也强调快速反应和精确射击。视角:俯视角度可以是固定的,也可以随着玩家角色的移动而变化,但都允许玩家以全局视角观察整个战场,有利于制定战略和规划行动。射击:玩家通常需要使用各种武器来与敌人进行战斗,包括枪械、爆炸物等。射击动作依赖于玩家的反应速度和准确性。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7832

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[Android UI]android-lockpattern图案解锁的实现分享

本文属于学习分享,如有雷同纯属巧合 怎么会有雷同呢?     本着技术分享,学习互助的原则,我在此分享一款已经开源的android 图案解锁的实现。 项目地址:https://code.google.com/p/android-lockpattern/  (考虑到要翻墙,才写了这个demo) 它也是参考了android自带的图案锁的源码而修改的,可以作为app来调用。 先看看实现效果吧!

消失的天空 4339

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils等分析

Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils 在使用别人写的这个手势密码的时候,我们通常是有自己的需求,可能这里的代码很多也很复杂,有没有什么很多注释,要把整个代码弄明白是要花很多时间而且基础要非常好的,可能在赶项目的时候没有时间去研究,下面我列出一些关键的地方,方便修改代码。 1.在创建手势密码的时候CreateG

pcaxb的专栏 6968

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

DIOCP开源项目-Delphi高性能无锁队列(lock-free)

最近想在DIOCP中加入任务调度线程,DIOCP的工作线程作为生产者(producer)将接受到的数据对象,投递到任务调度线程中,然后统一进行分配。然而这一切都需要一个队列, 这几天都在关注无锁队列。 [队列] 首先是一个队列,简单的队列就是,生产者把数据压入队列(push), 消费者通过队列Pop出数据进行处理。 简单的队列就是提供Push,和Pop函数。 我们用一个链表...

630
上一篇: 设计模式、用Delphi实现----&gt;Wrapper pattern
下一篇: 好书推介:java的秘密!
programlover
博客等级 码龄26年 1粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值