मेरे पास सी ++ में लिखी एक असीमित डेटाफ्लो प्रणाली है। डेटाफ्लो आर्किटेक्चर में, एप्लिकेशन घटक उदाहरणों का एक सेट है, जिसे स्टार्टअप पर प्रारंभ किया जाता है, फिर वे एक दूसरे को प्री-डिफ़ाइंड संदेशों के साथ संवाद करते हैं। पुलसर नामक एक घटक प्रकार है, जो अन्य घटकों को "घड़ी संकेत संदेश" प्रदान करता है जो इसे एक से कनेक्ट करता है (उदा। देरी)। यह प्रत्येक एक्स एमएस संदेश (डेटाफ्लो डिस्पैचर एपीआई को कॉल करता है) कहता है, जहां एक्स "फ्रीक्वेंसी" पैरामीटर का मान है, जो एमएस में दिया जाता है।ए में एक फ़ंक्शन (सी/सी ++) कॉल करने का आधिकारिक तरीका क्या है। लिनक्स पर हर 1/100 सेकंड?
छोटा, कार्य केवल प्रत्येक एक्स एमएस में एक फ़ंक्शन (विधि) को कॉल करने के लिए है। सवाल यह है कि ऐसा करने का सबसे अच्छा/आधिकारिक तरीका क्या है? क्या इसके लिए कोई पैटर्न है?
- उपयोग SIGALRM:
कुछ तरीकों मैंने पाया हैं। मुझे लगता है, सिग्नलिंग उस उद्देश्य के लिए उपयुक्त नहीं है। Altough, संकल्प 1 सेकंड है, यह बहुत दुर्लभ है।
- एचडब्ल्यू इंटरप्ट का उपयोग करें। मुझे इस सटीकता की आवश्यकता नहीं है। इसके अलावा, मुझे एचडब्ल्यू से संबंधित समाधान का उपयोग करने के बारे में पता है (सर्वर कई प्लेटफार्मों के लिए संकलित है, उदाहरण के लिए एआरएम)।
- अगली कॉल तक समय बीतें, और सोएं()। मुझे यकीन नहीं है कि 5 थ्रेड द्वारा समय से संबंधित सिस्टम कॉल कॉल करने के लिए समय मापने का सबसे अच्छा तरीका है, हर सेकेंड में प्रत्येक 10 बार - लेकिन शायद मैं गलत हूं।
- रीयलटाइम कर्नेल फ़ंक्शन का उपयोग करें। मुझे इसके बारे में कुछ नहीं पता। इसके अलावा, मुझे क्रिस्टल सटीक कॉल की आवश्यकता नहीं है, यह एक परमाणु नहीं है, और मैं कुछ प्लेटफॉर्म पर आरटी कर्नेल स्थापित नहीं कर सकता (भी, 2.6.x कर्नेल उपलब्ध है)।
शायद, सबसे अच्छा जवाब एक ऑडियो/वीडियो प्लेयर के स्रोत कोड (जिसे मैं स्वयं नहीं ढूंढ/समझ सकता हूं) का संक्षिप्त टिप्पणी है।
अद्यतन (@MSalters द्वारा अनुरोध किया गया): डीएफ प्रोजेक्ट के सह-लेखक मैक ओएसएक्स का उपयोग कर रहे हैं, इसलिए हमें एक समाधान मिलना चाहिए जो अधिकांश पॉक्सिक्स-कंपिलेंट सेशन पर काम करता है। सिस्टम, न केवल लिनक्स पर। शायद, भविष्य में एक लक्षित उपकरण होगा जो बीएसडी, या कुछ प्रतिबंधित लिनक्स का उपयोग करता है।
आपके आरक्षण के बावजूद एक संकेत उपयुक्त है। 'मैन सेटिटिमर' की जांच करें, इसे जाने दें, और अगर आपको वास्तविक समस्याएं हैं तो हमें बताएं। यदि आप पहले से ही कुछ (जैसे) में अवरुद्ध कर रहे हैं, तो आप इसके बजाय टाइमआउट मान का उपयोग कर सकते हैं। –
मल्टीथ्रेड ऐप के लिए अच्छी पसंद सिग्नल कर रहा है? जब एक संकेत आता है, तो इसे एप्राइपिएट थ्रेड में "प्रेषित" होना चाहिए। – ern0
सिग्नल मास्क प्रति थ्रेड हैं, इसलिए आप हर दूसरे धागे में 'SIGALRM' को अवरुद्ध कर सकते हैं। – caf