我有一个问题,一些代码是由一个开发人员编写的,现在已经离开了我们的公司,代码实现了一个tcpserver,它响应一个基于XML的协议。在我们的测试环境中,这似乎工作得非常好,但是有一两个客户在应用程序关闭方面遇到了问题。
这就是我在onexecute活动中所拥有的
try
// code to handle connection including tidnotify etc....
except
on E:Exception do
begin
if (e.InheritsFrom(EIdSilentException) = False) then
TXMLTraceNotify.XMLTrace('TCPServerExecute: ' + E.Message,ttProblem, FTraceProc);
raise; //we must raise all exceptions for indy to handle them.
end;
结束;
宣言。
public
TransactionStrings: TIdThreadSafeStringList;
这就是我在tcpserver的上下文中添加它的方式。
TransactionStrings.Add(newTrans.AsString);
这就是我如何在主应用程序线程的上下文中阅读它
slXMLTrans := TStringList.Create;
try
slTemp := FCustomXMLServer.TransactionStrings.Lock;
try
slXMLTrans.Assign(slTemp);
slTemp.Clear;
finally
FCustomXMLServer.TransactionStrings.Unlock;
end;
if slXMLTrans.Count > 0 then
begin
for i := 0 to Pred(slXMLTrans.Count) do
TAbstractTerminal.ProcessXMLTrans(slXMLTrans[i]);
slXMLTrans.Clear;
end;
finally
slXMLTrans.Free;
end;
我认为这是正确的使用方法,但我等待您的意见。