2012-11-15 30 views
8

với máy chủ TIdHTTPServer độc lập, ngay cả OnCommandGet, có khả năng chuyển sang AResponseInfo.ContentStream một luồng với dữ liệu. . khi tôi có thể phát hành luồng đó? giả sử máy chủ có thể nhận được nhiều yêu cầu và mọi yêu cầu có thể được xử lý tại thời điểm đã cho và một luồng có thể hoàn thành tùy ý cho một yêu cầu khác.sau khi một luồng được truyền tới CommandGet, khi nào nó có thể được giải phóng?

nơi luồng có thể được giải phóng?

mã ví dụ:

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; 

Khi dòng có thể được giải thoát? về những gì thậm chí, và làm thế nào để chúng ta biết IdHttpServer, đã hoàn thành việc chuyển giao của nó?

Trả lời

14

Khi bạn gán nó cho thuộc tính ContentStream, Indy sẽ trở thành chủ sở hữu luồng của bạn và sẽ giải phóng nó khi không còn cần thiết nữa.

Chỉnh sửa: Giả sử bạn rời khỏi FreeContentStream thuộc tính được đặt thành True (là mặc định).

Các vấn đề liên quan