我用 ciMultiInstance, tmApartment 模式测试了一下,测试方法和结果如下:
实现应用服务器,定义方法 TestStr
function TDBSrv.TestStr: WideString;
var
s: String;
begin
s := IntToStr(GetTickCount);
Sleep(3000);
s := s + ',' + IntToStr(GetTickCount);
Sleep(2000);
s := s + ',' + IntToStr(GetTickCount);
Result := s;
end;
客户端调用的代码是:
procedure TForm1.Button1Click(Sender: TObject);
begin
DCOMConnection1.Connected := True;
Caption := DCOMConnection1.AppServer.TestStr;
DCOMConnection1.Connected := False;
end;
我先后启动了4个客户端,分别调用此函数,
结果如下(数字是自计算机启动以来的毫秒计数):
客户端1: 2556816,2559820,2561823
客户端2: 2557297,2560301,2562304
客户端3: 2557968,2560972,2562975
客户端4: 2558408,2561413,2563415
我们看到上面的时间点发生了严重的重叠,
所以得出结论:
ciMultiInstance, tmApartment 模式并不是排队处理的
而是同时为每个客户端服务的,
这种模式完全可以满足你的需要,
你所说的问题不是数据模块的线程模式造成的,
而是你的别的方面的设计有问题,
才造成了排队的现象(有可能是假排队现象)