अपने आवेदन में है दो धागेइंटर-थ्रेड संचार। मैं कैसे एक और धागा करने के लिए एक संकेत भेजने के लिए
- एक "मुख्य थ्रेड" जो व्यस्त है समय की सबसे
- एक "अतिरिक्त धागा" जो बाहर कुछ HTTP अनुरोध भेजता है और जो तब तक ब्लॉक करता है जब तक यह प्रतिक्रिया प्राप्त न हो जाए।
हालांकि, HTTP प्रतिक्रिया केवल मुख्य धागे द्वारा ही संभाली जा सकती है, क्योंकि यह इसके थ्रेड-स्थानीय-स्टोरेज और गैर-थ्रेडसेफ फ़ंक्शंस पर निर्भर करती है।
मैं HTTP थ्रेड प्राप्त होने पर और संबंधित डेटा के मुख्य थ्रेड को बताने का एक तरीका ढूंढ रहा हूं। मुख्य थ्रेड को अतिरिक्त थ्रेड द्वारा बाधित किया जाना चाहिए और जितनी जल्दी हो सके HTTP प्रतिक्रिया को संसाधित करना चाहिए, और बाद में उस बिंदु से काम करना जारी रखें जहां इसे पहले बाधित किया गया था।
एक तरह से मैं के बारे में सोच सकते हैं कि अतिरिक्त धागा
SuspendThread
का उपयोग कर मुख्य थ्रेड से निलंबित कर देता है, मुख्य थ्रेड कुछ इनलाइन कोडांतरक का उपयोग करने से प्रतियां टीएलएस, प्रतिक्रिया प्रसंस्करण समारोह में ही निष्पादित करता है और बाद में मुख्य थ्रेड शुरू ।मेरे विचारों में एक और तरीका है, दूसरे थ्रेड कॉलबैक रूटीन में कुछ विशिष्ट पते पर एक ब्रेक पॉइंट सेट करना, ताकि मुख्य थ्रेड अधिसूचित हो जाए जब दूसरे थ्रेड निर्देश पॉइंटर उस ब्रेक पॉइंट पर कदम उठाए - और इसलिए - HTTP प्रतिक्रिया प्राप्त की।
हालांकि, दोनों विधियां अच्छी तरह से प्रतीत नहीं होती हैं, अगर वे केवल उनके बारे में सोचते हैं तो भी उन्हें चोट पहुंचती है, और वे वास्तव में विश्वसनीय नहीं दिखते हैं।
मैं पर अपने मुख्य धागे को बाधित कर सकता हूं, यह कहकर कि यह विनम्र होना चाहिए और कुछ और करने से पहले HTTP प्रतिक्रिया को संसाधित करना चाहिए? पुस्तकालयों पर निर्भरताओं के बिना उत्तर की सराहना की जाती है, लेकिन अगर मैं कुछ अच्छा समाधान प्रदान करता हूं तो मैं कुछ निर्भरता भी लेता हूं।
निम्नलिखित question (QueueUserAPC समाधान के बारे में) के जवाब दिए और समझाया है कि वहाँ मेरे मामले में एक धक्का -behaviour के लिए कोई सुरक्षित तरीका था।
क्या आपको वास्तव में अपने मुख्य धागे को "बाधित" करने की आवश्यकता है? कतार या अन्य कार्य तंत्र से, वैसे भी यह कैसे काम कर रहा है? – sdg
हां, रुकावट है जो मैं अपने मामले में पूरा करना चाहता हूं (कुछ "पुश" -स्टाइल तरीके से। कुछ 'प्रतीक्षा करें' या 'देखो' अगर कुछ नहीं 'या' पोल' 'पुल' -स्टाइल चीज़)। प्रसंस्करण भाग HTTP थ्रेड प्राप्त करता है जो दूसरे थ्रेड से प्राप्त किया गया था और बाद में कुछ गैर-थ्रेडसेफ कार्यों को लुआ दुभाषिया को कॉल करता है। दूसरे थ्रेड से संदेश को मुख्य थ्रेड तक प्राप्त करने के लिए "कैसे" कुछ साझा स्मृति हो सकती है, हालांकि यह अभी तक तय नहीं किया गया है क्योंकि मुझे नहीं पता कि दूसरे धागे को मुख्य थ्रेड को कैसे सूचित किया जाए, जिसे अब संसाधित करना चाहिए । – Etan
आपका मुख्य धागा क्या कर रहा है? क्या यह बाधा है? –