码迷,mamicode.com
首页 > 编程语言 > 详细

使用TkbmMWThreadList实现线程安全列表

时间:2019-04-29 15:23:30      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:div   代码   线程安全   list   版本   func   procedure   自己的   down   

2008年的2.90.00版本,作者实现了TkbmMWThreadList,之后在kbmMW 4.40.00版本,作者将TkbmMWThreadList改成了泛型版本,用以实现线程安全的列表。要使用TkbmMWThreadList,引用kbmMWGlobal单元即可。

现在我们来看看,如何用TkbmMWThreadList实现自己的列表来管理对象。

1.声明列表对象:

FConnectionList:TkbmMWThreadList<TConnectionDataModule>;

上面代码,用FConnectionList来管理TConnectionDataModule对象。

2.建立FConnectionList实例:

FConnectionList := TkbmMWThreadList<TConnectionDataModule>.Create;

3.向对象列表填加被管理的对象:

procedure TMainDatamodule.AddConnection(AConnectionDataModule: TConnectionDataModule);
var
   lst:TList<TConnectionDataModule>;
begin
     lst:=FConnectionList.BeginWrite;
     try
        lst.Add(AConnectionDataModule);
     finally
        FConnectionList.EndWrite;
     end;
end;

调用AddConnection方法,增加一个被管理的对象:

...
AddConnection(cdm);
...

4.清空列表对象:

procedure TMainDatamodule.ClearAllConnection;
var
   i:integer;
   lst:TList<TConnectionDataModule>;
begin
     lst:=FConnectionList.BeginWrite;
     try
        for i:=lst.Count-1 downto 0 do
            lst.Items[i].Free;
        lst.Clear;
     finally
        FConnectionList.EndWrite;
     end;
end;

上面代码,清空列表对象中的所有被管理的对象。

5.读取列表中的被管理的对象:

function TMainDatamodule.GetConnectionPool(AConnectionName: string): TConnectionDataModule;
var
  i: Integer;
  lst:TList<TConnectionDataModule>;
begin
  Result := nil;
  lst:=FConnectionList.BeginRead;
  try
      for i := 0 to lst.Count - 1 do
      begin
        if lst.Items[i].Name = AConnectionName then
        begin
          Result := lst.Items[i];
          Break;
        end;
      end;
  finally
      FConnectionList.EndRead;
  end;
end;

基本实现方法,都写了,可以在线程中安全的使用FConnectionList对象了!

 

使用TkbmMWThreadList实现线程安全列表

标签:div   代码   线程安全   list   版本   func   procedure   自己的   down   

原文地址:https://www.cnblogs.com/kinglandsoft/p/10790385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!