• 在线程中使用kbmMWClientQuery的安全处理


    最近应用遇到奇怪的问题,在线程中读取一个ClientQuery的字段值时,读取的不完整,造成执行结果错误。大体上象这样的代码:

    TUser=Class
      qUser:TkbmMWClientQuery;
    public
      function UserID:string read GetUserID;
    end;
    
    ....
    
    function TUser.GetUserID:string;
    begin
       result:=qUser.FieldByName('UserID').AsString;
    end;

    最后改成这样,问题解决:

    TUser=Class
      FLock:TkbmMWLock;
      qUser:TkbmMWClientQuery;
    public
      function UserID:string read GetUserID;
    end;
    
    ....
    
    function TUser.GetUserID:string;
    begin
       FLock.BeginWrite;
       try
          result:=qUser.FieldByName('UserID').AsString;
       finally
          FLock.EndWrite;
       end;
    end;

    也就是增加了锁,来保证线程安全!

    上文中用到的FLock是kbmMW提供的锁对象,kbmMWClientQuery是kbmMW提供的内存数据集对象。

    开发环境:

    Delphi 10.3.3

    kbmMW 5.13

  • 相关阅读:
    cocos2dx 动画控制概要
    lua与C交互 具体
    lua与C/C++交互概要
    3D图像算法
    lua 语言笔记
    iostransitiontranslate闪屏问题总结
    document.onreadystatechange()来判断页面加载完
    JavaScript装逼指南
    box-shadow 阴影
    web小技巧
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14042044.html
Copyright © 2020-2023  润新知