2012-11-15 26 views
8

इंडी TIdHTTPServer के साथ, OnCommandGet पर भी, AResponseInfo.Content को डेटा के साथ स्ट्रीम स्ट्रीम करने की संभावना है। जो ठीक है। मैं उस स्ट्रीम को कब जारी कर सकता हूं? मानते हैं कि सर्वर बहु ​​अनुरोध प्राप्त कर सकता है, और किसी भी अनुरोध को दिए गए समय पर संभाला जा सकता है, और एक धारा दूसरे के विपरीत मनमानी हो सकती है।, इसे कब मुक्त किया जा सकता है?

स्ट्रीम को मुक्त किया जा सकता है?

कोड उदाहरण:

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 को कैसे जानते हैं, अपना स्थानांतरण समाप्त कर दिया?

उत्तर

14

जब आप इसे ContentStream संपत्ति पर असाइन करते हैं, तो इंडी आपकी स्ट्रीम का मालिक बन जाती है और इसकी आवश्यकता होने पर इसे मुक्त कर देगी।

संपादित करें: मान लें कि FreeContentStream संपत्ति True (जो डिफ़ॉल्ट है) पर सेट है।