क्या यह डेल्फी वीसीएल घटना द्वारा एक चर सेट को पढ़ने के लिए थ्रेड के लिए सुरक्षित है?क्या थ्रेड सुरक्षित रूप से वीसीएल घटनाओं द्वारा निर्धारित चर पढ़ सकते हैं?
जब कोई उपयोगकर्ता वीसीएल टीकेकबॉक्स पर क्लिक करता है, तो मुख्य थ्रेड चेकबॉक्स की चेक किए गए राज्य में बूलियन सेट करता है।
CheckboxState := CheckBox1.Checked;
किसी भी समय, एक धागा पढ़ता है कि चर
if CheckBoxState then ...
इससे कोई फर्क नहीं पड़ता अगर धागा बूलियन में होने वाले बदलाव "याद करते हैं", क्योंकि धागा के रूप में एक पाश में चर की जाँच करता है यह अन्य चीजें करता है। तो यह अंततः राज्य परिवर्तन देखेंगे ...
क्या यह सुरक्षित है? या मुझे विशेष कोड चाहिए? गंभीर कोड कॉल आवश्यक और पर्याप्त के साथ परिवर्तनीय (धागे और मुख्य धागे में क्रमशः पढ़ने और लिखने के आसपास है?
जैसा कि मैंने कहा था, इससे कोई फर्क नहीं पड़ता कि थ्रेड को "गलत" मान मिलता है, लेकिन मैं सोचता रहता हूं कि यदि कोई थ्रेड एक चर को पढ़ने की कोशिश करता है तो मुख्य थ्रेड में होता है तो निम्न स्तर की समस्या हो सकती है इसे लिखने के बीच, या इसके विपरीत।
मेरा प्रश्न इस जैसा है: Cross thread reading of a variable who's value is not considered important।
(इसके अलावा मेरे पिछले प्रश्न से संबंधित: Using EnterCriticalSection in Thread to update VCL label)
ध्यान दें कि वीसीएल कार्यक्रम वास्तव में कुछ विशेष नहीं हैं। आपका प्रश्न * किसी * * थ्रेड में * किसी * प्रकार के फ़ंक्शन से चर का उपयोग करने के लिए समान रूप से अच्छी तरह से लागू होता है। –