当一个流被传递给CommandGet后,它什么时候可以被释放?

9

在indy TIdHTTPServer中,通过OnCommandGet事件,可以将数据流传递给AResponseInfo.ContentStream。这很好。

那么什么时候可以释放该流呢?假设服务器可以获取多个请求,并且任何请求都可以在任何时间处理,并且一个流可以随意完成其他流。

那么该流应该在哪里被释放呢?

代码示例:

var
  StreamsToFree : TList;

//assume StreamsToFree := TList.create; properly 

procedure TObject.IdHttpServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
stream : TFileStream;
begin
  stream := TFileSTream.create('file.name');
  AResponseInfo.ContentStream := stream;
  AResponseInfo.ResponseNo := 200;
  StreamsToFree.Add(generateReceiptXML);  
end;

在什么事件下,流可以被释放?我们如何知道 IdHttpServer 已经传输完成?

1个回答

15

当您将其分配给ContentStream属性时,Indy将成为您流的所有者,并在不再需要时释放它。

编辑:假设您保留FreeContentStream属性设置为True(这是默认值)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接