zoukankan      html  css  js  c++  java
  • [转载红鱼儿]kbmmw 开发点滴:TkbmMWLock用法

    TStringList不是线程安全的,当我们在线程用到他是,要做保护。方法有两种,一种是用delphi自带的Critical,另外一种就是kbmMW为我们提供的TkbmMWLock类。
    现在我们看看如何用TkbmMWLock为TStringList做线程安全:

    1.基于TStringList声明自己的类:
    TThreadStringList=class(TStringList)
    2.在该类中增加kbmMWLock实例
    Private
     

    FLock:TkbmMWLock;
    在类的Create及Destructor方法中建立与取消

    3.调用方法
    当我们在操作ThreadStringList实例时,调用kbmMWLock的的Lock.BeginWriet及Lock.EndWrite方法进行保护就行了。

    4.附最后的代码:
    TThreadStringList=class(TStringList)
    Private
      FLock:TkbmMWLock
    public
      constructor Create;override;
      destructor Destroy;override;
      property Lock:TkbmMWLock Read FLock;
    end;

    constructor TThreadStringList.Create;
    begin
      inherited Create;
      FLock:=TkbmMWLock.Create;
    end;
    destructor TThreadStringList.Destroy;
    begin
      FLock.Free;
      inherited Destroy;
    end;

    使用该类的代码:
    sl:TThreadStringList;
    ...
    sl.Lock.BeginWrite;
    try
      sl.Add('Test!');
    finally
      sl.Lock.EndWrite;
    end;
    当然,这里的操作sl,含读与写两种操作。

    通过上面说明,我们看到了TkbmMWLock的用法,就是为一个类增加一个线程锁,实际上,kbmMW本身很多的类,就是用kbmMWLock加线程锁的,我们也可以随时利用kbmMWLock为自己的类加锁。

    当然,不喜欢这样,想用Delphi自带的来保护线程也一样,全凭个人喜好了!
  • 相关阅读:
    绝对差不超过限制的最长连续子数组
    单调栈的认识及其应用
    寻找两个正序数组的中位数寻找两个正序数组的中位数
    JVM垃圾回收机制和python的垃圾回收
    K 个不同整数的子数组
    python中闭包
    2021/2/8_ 最长湍流子数组
    python中的函数
    python中可变类型与不可变类型 + 类型转换
    python的元组
  • 原文地址:https://www.cnblogs.com/xalion/p/2735159.html
Copyright © 2011-2022 走看看