最近应用遇到奇怪的问题,在线程中读取一个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