7

मैं करना चाहते हैंक्या एक कार्यकर्ता धागे में SHFileOperation का उपयोग करना सुरक्षित है?

  • एक पृष्ठभूमि धागा जो हमेशा सिर्फ एक ही SHFileOperation समय में, SHFileOperation समारोह के माध्यम से फ़ाइलों की प्रतिलिपि जाएगा
  • मैं की जरूरत है (लेकिन मैं यह धागा में रहना चाहता हूँ) यूआई उत्पादन, इसलिए मैं FOF_SIMPLEPROGRESS ध्वज का उपयोग करें और Wnd सदस्य के लिए कुछ पारित

मैं दो प्रश्न

    की आवश्यकता है
  1. SHFileOperation को FOF_SIMPLEPROGRESS ध्वज (उपयोगकर्ता इंटरैक्शन के लिए) के अलावा मुख्य के अलावा धागे से कॉल करना सुरक्षित है?
  2. यदि हां, तो मुझे Wnd सदस्य में किस संभाल को पास करना चाहिए? मैंने मुख्य रूप के हैंडल की कोशिश की है, लेकिन जब उदा। अधिलेखित पुष्टि संवाद पॉप अप होता है और आप इस बात की पुष्टि यह, मुख्य रूप पृष्ठभूमि को भेजा जाता है, क्या वास्तव में अजीब बात है

नोट: मैं इन कार्यों के लिए एक कतार है, तो केवल एक ही SHFileOperation समय में किया जाता है (के बाद वह पूरा नहीं, धागा अन्य कार्रवाई जारी है, अगले SHFileOperation हो सकता है क्या)

धन्यवाद एक बहुत

उत्तर

6
  1. यह मुख्य थ्रेड के अलावा किसी अन्य धागे से SHFileOperation कॉल करने के लिए पूरी तरह से सुरक्षित है।
  2. मैं 0hwnd सदस्य के रूप में पास करूंगा। यदि आप मुख्य विंडो के हैंडल को पास करते हैं तो मुझे उम्मीद है कि विंडो अक्षम हो जाएगी क्योंकि SHFileOperation एक मोडल संवाद है। चूंकि फ़ाइल पुष्टिकरण और प्रगति संवाद पृष्ठभूमि थ्रेड के लिए शीर्ष स्तर UI हैं, इसलिए आप इन मोडल संवाद दिखाते समय किसी भी विंडो को अक्षम नहीं करना चाहते हैं।
+0

यह सुनकर बहुत अच्छा लगा। 'WND' सदस्य 0 पर सेट पूरी तरह से काम करता है। आपका बहुत बहुत धन्यवाद! –

+0

इसके अलावा, दस्तावेज़ भी उल्लेख करता है कि SHFILEOPSTRUCT के साथ सापेक्ष पथ का उपयोग थ्रेड सुरक्षित नहीं है। तो यदि आप इसे एक कार्यकर्ता थ्रेड में उपयोग करते हैं तो आपको पूर्ण पथ का उपयोग करना होगा! – 8bitwide

+0

@ 8bitwide सापेक्ष पथ का उपयोग कभी थ्रेड सुरक्षित नहीं है। किसी भी एपीआई कॉल के लिए नहीं। ऐसा इसलिए है क्योंकि प्रति प्रक्रिया एक कार्यशील निर्देशिका है। –

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