2013-02-20 45 views
5

फिलहाल मैं डेल्फी में ई-मेल भेजने के लिए Ararat Synapse का परीक्षण कर रहा हूं।डेल्फी के लिए Synapse के साथ मैं एक एसएमटीपी प्रेषण ऑपरेशन कैसे रोक सकता हूं?

एक स्थानीय फ़ंक्शन एक TSMTPSend बनाता है और ई-मेल भेजता है।
मैं इस ऑपरेशन को कैसे रोक सकता हूं? मैंने कुछ स्थिति आउटपुट करने के लिए SMTP.Sock.OnStatus को असाइन किए गए कॉलबैक फ़ंक्शन को सेट किया है।
जब मैं भेज प्रगति को रद्द करना चाहता हूं, मैंने सोचा कि मैं कॉलबैक फ़ंक्शन के भीतर TSMTPSend की TTCPBlockSocket का उपयोग कर सकता हूं क्योंकि इस फ़ंक्शन में मुझे सीधे TSMTPSend तक कोई पहुंच नहीं है।

मुझे क्या करना चाहता था मूल रूप से की तरह

MyCallBack(Sender: TObject; Reason: THookSocketReason; const Value: string); 
begin 
    if FCancelWasClicked then 
    begin 
    if Sender is TTCPBlockSocket then 
     TTCPBlockSocket(Sender).StopFlag := True; 
     // or TTCPBlockSocket(Sender).AbortSocket or CloseSocket 
    end; 
end; 

लग रहा है लेकिन StopFlag कोई प्रभाव नहीं और AbortSocket/CloseSocket एक Stackoverflow करने के लिए नेतृत्व क्योंकि सॉकेट तो HR_CloseSocket संदेशों बेहद पम्पिंग हो जाएगा पता चलता है।

क्या मैं इसे गलत कर रहा हूं? क्या अन्य विकल्प हैं?

उत्तर

6

Synapse दिल की धड़कन समारोह प्रदान करता है, जो रद्द व्यवहार के कार्यान्वयन की अनुमति देता है।

http://www.ararat.cz/synapse/doku.php/public:howto:heartbeat

OnHeartbeat घटना संभाल, दिल की धड़कन के बीच अंतराल को HeartbeatRate गुण सेट, और कार्रवाई को रद्द करने के लिए StopFlag निर्धारित किया है।

+1

धन्यवाद, यह एक दयालुता है जिसे मैं इसे ढूंढने में सक्षम नहीं था। यह अच्छी तरह से काम किया। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^