红鱼儿

在线程中使用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

posted on 2020-11-26 14:18  红鱼儿  阅读(332)  评论(1编辑  收藏  举报