2011-09-12 13 views
5

मैं वर्तमान में माइक्रोसॉफ्ट के Concurrency Runtime में एसिंक्रोनस एजेंट्स लाइब्रेरी के साथ खेल रहा हूं। मुझे अभी तक सिग्नल करने का एक स्पष्ट तरीका नहीं मिला है कि विंडो संदेशों का उपयोग करके कार्य पूरा हो गया है, या यूआई थ्रेड को सूचित करने के कुछ अन्य साधन हैं जो काम खत्म हो गया है।असीमित एजेंट और विंडो संदेश

मुझे पता है कि मैं कार्यों के साथ विंडो हैंडल और संदेश मान (WM_xxx) पास कर सकता हूं, और कार्य को यूआई थ्रेड को सिग्नल करने के लिए PostMessage() का उपयोग कर सकते हैं। यह मेरी राय में कुछ हद तक बदसूरत है, और त्रुटि का स्रोत है। यदि कोई अपवाद होता है, तो मेरे पास एक कैच हैंडलर होना चाहिए जो मेरे यूआई थ्रेड को सिग्नल करता है। यह आसानी से भुला दिया जाता है, और अपवाद की स्थिति अक्सर नहीं चलती है, इसलिए इसे खोजना मुश्किल है।

प्रलेखन यूआई थ्रेड पर डेटा को स्थानांतरित करने के तरीके के बारे में वार्तालाप करता है। यह विंडो संदेशों का उपयोग नहीं करता है, लेकिन मतदान तकनीक। यदि कोई कार्य समाप्त हो गया है, तो "इंटरप्ट" विधियां उपलब्ध होने पर मुझे मतदान के लिए टाइमर सेट करने के लिए मूर्खतापूर्ण लगता है!

यह अजीब बात है कि यह पुस्तकालय में नहीं बनाया गया है, क्योंकि यह एक क्रॉस प्लेटफ़ॉर्म लाइब्रेरी नहीं है। यह केवल विंडोज़, और विंडोज़ पर चलाने के लिए डिज़ाइन किया गया है, जो मैं समझता हूं।

क्या लाइब्रेरी में कार्यक्षमता उपलब्ध है, या क्या मुझे इसे रोल करना है?

उत्तर

1

आप विंडोज़ संदेश के लिए एक unbounded_buffer की निगरानी के एकमात्र फ़ंक्शन के साथ एक मॉनीटर थ्रेड बना सकते हैं और उस संदेश को उचित रूप से प्रेषित कर सकते हैं। अपने एजेंटों को इस बफर के बारे में पता है।

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