在WINDOWS里面使用临界来保护多线程需要访问的共享对象,现在,DELPHI有了新的跨平台临界保护者--System.TMonitor
代码演示如下:
FConnections := TObjectDictionary<TIdTCPConnection,TDSTCPChannel>.Create;
。。。
procedure TCMServerForm.CMServerTransportDisconnectEvent(Event: TDSTCPDisconnectEventObject);
var
 Index: Integer;
begin
 if (FConnections = nil) or (Event.Connection = nil) then
 Exit;
 //进入临界保护
 System.TMonitor.Enter(FConnections);
 try
 FConnections.Remove(TIdTCPConnection(Event.Connection));
 TThread.Synchronize(nil, procedure
 begin
 //update the connection list box, removing the connection that was just closed
 Index := ConnectionsList.Items.IndexOfObject(Event.Connection);
 if Index > -1 then
 begin
 ConnectionsList.Items.Delete(Index);
 if ConnectionsList.SelCount = 0 then
 SessionIdList.ClearSelection;
 end;
 end);
 finally
// 终止临界保护
 System.TMonitor.Exit(FConnections);
 end;
end;