आपको काम करने के लिए थ्रेड में टर्मिनेट की जांच करनी है। उदाहरण के लिए:
procedure TMyThread.Execute;
begin
while not Terminated do begin
//Here you do a chunk of your work.
//It's important to have chunks small enough so that "while not Terminated"
//gets checked often enough.
end;
//Here you finalize everything before thread terminates
end;
इस के साथ
, आप कॉल कर सकते हैं
MyThread.Terminate;
और यह जैसे ही यह काम का एक और हिस्सा प्रसंस्करण खत्म समाप्त होगा। इसे "सुन्दर धागा समाप्ति" कहा जाता है क्योंकि धागे को किसी भी काम को खत्म करने और समाप्ति के लिए तैयार करने का मौका दिया जाता है।
एक अन्य विधि है, जिसे 'मजबूर समाप्ति' कहा जाता है। आप कॉल कर सकते हैं:
TerminateThread(MyThread.Handle);
जब आप ऐसा करते, विंडोज जबरदस्ती किसी भी गतिविधि सूत्र में बंद हो जाता है। इसे थ्रेड में "समाप्त" की जांच करने की आवश्यकता नहीं है, लेकिन संभावित रूप से अत्यधिक खतरनाक हो सकता है, क्योंकि आप ऑपरेशन के बीच में धागे को मार रहे हैं। आपका आवेदन उसके बाद क्रैश हो सकता है।
यही कारण है कि आप कभी भी टर्मिनेट थ्रेड का उपयोग नहीं करते हैं जब तक कि आप पूरी तरह से सुनिश्चित न हों कि आपके पास सभी संभावित परिणाम सामने आए हैं। वर्तमान में आप नहीं करते हैं, तो पहली विधि का उपयोग करें।
धन्यवाद टिमो। उत्तर और उदाहरण साफ़ करें। – Dylan
और खुद को धन्यवाद। एक बहुत अच्छा उदाहरण है। – Dylan
यह न केवल एप्लिकेशन क्रैश हो सकता है, बल्कि थैड द्वारा उपयोग किए जाने वाले संसाधनों को भी हटाया नहीं जाएगा। टर्मिनेट थ्रेड() एक "एक्स्ट्रेमा अनुपात" कॉल है। –