मैं पृष्ठभूमि धागे के आधार पर अंतःस्थापित कार्यों को कार्यान्वित करना चाहता हूं। TTask.Stop
विधि को लागू करने का सबसे साफ तरीका क्या है? मैं पृष्ठभूमि धागे को कैसे रोक सकता हूं?धागे को छोड़ दें?
थ्रेड संदर्भ के भीतर निष्पादित कोड को अज्ञात विधि का उपयोग करके कार्य में पास किया जाता है और इसमें ब्लॉकिंग कॉल हो सकती है, इसलिए मैं इस तथ्य पर भरोसा नहीं कर सकता कि Terminated
ध्वज नियमित रूप से कोड के भीतर से चेक किया जाता है।
किसी भी इनपुट के लिए धन्यवाद।
D2010 मामले में यह मायने रखता है (TThread
में कुछ चीजें बदल गई लगते हैं)
यह एक अच्छा (+1) उत्तर है; सीएफ पाइथन थ्रेडिंग, जहां ग्लोबल इंटरप्रेटर लॉक से काफी कुछ बनाया गया है जो थ्रेड सुरक्षा (अच्छा) दोनों के लिए ज़िम्मेदार है और सभी व्यावहारिक उद्देश्यों के लिए बहु-कोडित कोड को एक कोर (खराब) तक सीमित करता है। उस समस्या का सबसे अच्छा समाधान धागे का उपयोग नहीं करना है, बल्कि मल्टीप्रोसेसिंग पैकेज के माध्यम से प्रक्रिया करता है, और कई मशीनों में स्केल करने की इस तत्काल क्षमता से प्राप्त किया जाता है, जो अंततः बड़े स्केलिंग के लिए आवश्यक हो जाता है। थ्रेड सुरक्षा के बारे में चिंता करने के बजाय, डेल्फी में आसान (आसान) मल्टीप्रोसेस प्रबंधन होना बेहतर होगा। –
सेमफोरस में "त्याग" राज्य नहीं है क्योंकि उनके पास स्वामित्व की कोई अंतर्निहित धारणा नहीं है। (जहां तक ओएस का संबंध है, एक धागा एक सेमफोर "पकड़" नहीं सकता है।) केवल एक म्यूटेक्स को जासूसी से छोड़ दिया जा सकता है। –
ब्लॉकिंग कोड के साथ इंटरप्टिबल कार्यों को लागू करने का यह एक अच्छा तरीका हो सकता है, हालांकि मुझे नहीं लगता कि प्रश्न में कार्यक्षमता (अनाम विधियों के लिए एक विघटनकारी कार्य) को डेल्फी के साथ इस तरह कार्यान्वित किया जाना चाहिए। अज्ञात विधि से निष्पादन योग्य (एक अलग प्रक्रिया के रूप में उत्पन्न होने के लिए) बनाने के लिए रनटाइम कंपाइलर होना आवश्यक होगा, है ना? – mghie