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自带的来保护线程也一样,全凭个人喜好了!
  • 相关阅读:
    boost::ASIO的异步方式
    C++ 类构造函数初始化列表
    C++11 shared_ptr(智能指针)详解
    C/C++中静态成员变量和静态成员函数的含义与不同用法
    静态局部变量
    GDB入门教程之如何使用GDB启动调试
    Qt的QWaitCondition了解一下吧
    Qt信号量QSemaphore认识一下
    瞧一瞧Qt的QMutex
    Qt的读写锁QReadWriteLock要怎么玩?
  • 原文地址:https://www.cnblogs.com/xalion/p/2735159.html
Copyright © 2011-2022 走看看