zoukankan      html  css  js  c++  java
  • 在线程中使用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

  • 相关阅读:
    FTP服务
    Samba文件共享服务设置
    Samba
    编译安装-httpd-2.2.15.tar.gz
    分析排查系统故障
    进程--计划任务
    磁盘配额
    LVM卷
    Linux磁盘分区
    用户组权限
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14042044.html
Copyright © 2011-2022 走看看