2010-07-13 17 views
5

मुझे I/O प्राप्ति बंदरगाहों (आईओसीपी) के आधार पर किसी एप्लिकेशन में टाइमर समर्थन जोड़ने की आवश्यकता है। मैं टाइमर प्रबंधित करने के लिए एक विशिष्ट धागे के उपयोग से बचना चाहता हूं।टाइमर जो ओवरलैप I/O (आईओसीपी के लिए) का समर्थन करता है?

लिनक्स पर, आप एक टाइमर बना सकते हैं जो फ़ाइल डिस्क्रिप्टर (timerfd.h मैन देखें) के माध्यम से समाप्ति अधिसूचनाएं प्रदान करता है, इसलिए यदि आपका एप्लिकेशन एपोल पर आधारित है तो उदाहरण के लिए इसका उपयोग करना बहुत अच्छा है।

Windows पर, आप एक अतुल्यकालिक प्रक्रिया कॉल (एसीपी) के साथ "waitable टाइमर" का उपयोग कर सकते हैं (http://msdn.microsoft.com/en-us/library/ms686898(v=VS.85).aspx देखें)

आप रुचि रखते हैं, kqueue (BSD, मैक ओएस) डिफ़ॉल्ट रूप से टाइमर का समर्थन करता है (EVFILT_TIMER देखें) ।

I/O प्राप्ति बंदरगाहों के साथ, हमें उन ओबेट्स का उपयोग करना होगा जो ओवरलैप्ड I/O का समर्थन करते हैं। तो, क्या आईओसीपी के लिए ऐसा टाइमर है?

सादर,

Cédrics

उत्तर

5

जहाँ तक मुझे पता के रूप में वहाँ कोई टाइमर है कि एक IOCP पूरा होने के उत्पन्न जब वे समय सीमा समाप्त हो रहे हैं।

आप विंडोज टाइमर कतार का प्रयास कर सकते हैं; CreateTimerQueueTimer

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

0

आप प्रतीक्षायोग्य टाइमर का उपयोग कर सकते हैं और "PostQueuedCompletionStatus" का उपयोग कर पूर्ण पोर्ट को कस्टम पैकेट कतार कर सकते हैं। लेकिन याद रखें कि यदि कई कार्यकर्ता धागे हैं तो केवल धागे में से एक को अधिसूचित किया जाएगा।