2013-02-23 45 views
5

के साथ ओबीजेसी/सी/सी ++ उच्च रिज़ॉल्यूशन टाइमर मुझे यकीन था कि इस सवाल से पहले पूछा गया है, इसलिए मैंने निश्चित रूप से खोज फ़ंक्शन का उपयोग यह जांचने के लिए किया कि क्या मेरे मुद्दे को हल करने का उत्तर है या नहीं।कॉलबैक

हालांकि, मुझे लगता है कि पर मापने पर बहुत सारे उत्तर बहुत सटीक थे।

मुझे जो चाहिए वह एक उच्च रिज़ॉल्यूशन (कम से कम मिलीसेकंड) टाइमर है जो मुझे निर्धारित समय अवधि पारित होने पर कॉलबैक को आग लगाने की अनुमति देता है। मैं इसे कोको मैक ओएस एक्स ऐप में उपयोग करना चाहता हूं, इसलिए सी/सी ++ या ओबीजे-सी संभव होगा। यदि अतिरिक्त पुस्तकालयों की आवश्यकता है, तो यह भी ठीक है।

मुझे यह http://www.songho.ca/misc/timer/timer.html मिला लेकिन यह एक व्यस्त प्रतीक्षा रणनीति का उपयोग कर रहा है और मुझे लगता है कि बहुत अधिक प्रदर्शन खर्च होगा।

सहायता की बहुत सराहना की जाती है!

+3

सी या सी ++? एक चुनें। –

+0

मुझे कोको नहीं पता, लेकिन आपको इसके इवेंट लूप तंत्र के बारे में अधिक पढ़ना चाहिए; यह निश्चित रूप से आपको कुछ टाइमर या मतदान देता है .... आपको मूल रूप से एक टाइमआउट ईवेंट कॉलबैक पंजीकृत करने का तरीका पता होना चाहिए। –

+0

इस प्रश्न में आपका उत्तर लगता है: http://stackoverflow.com/questions/464618/whats-the-equivalent-of-windows-queryperformancecounter-on-osx (दूसरा उत्तर: ओएसएक्स mach_absolute_time और mach_timebase_info पर सर्वोत्तम समकक्ष हैं Win32 QueryPerformance * functions।) –

उत्तर

6

एक महान तकनीक जिसका आप उपयोग कर सकते हैं सीधे ऐप्पल से आता है। टाइमर प्रेषण सूत्रों:

http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/GCDWorkQueues/GCDWorkQueues.html

यह कुछ समय ले कि पढ़ने के लिए होगा, लेकिन एक बार आप इसे पाने के लिए, यह उपयोग करने के लिए काफी आसान है। आप नैनोसेकंड में समय अंतराल निर्दिष्ट कर सकते हैं, और ब्लॉक जिसे समय-समय पर निष्पादित किया जाना चाहिए।

यह जीसीडी प्रौद्योगिकी का हिस्सा है, और यह सी आधारित है। चूंकि उद्देश्य-सी केवल सी प्लस कुछ जोड़ों के साथ है, यह सी से चिपकने के लिए और अधिक स्वाभाविक लगता है। सी ++ में जा रहा है और इस प्रकार उद्देश्य-सी ++ इस मामले में एक ओवरकिल जैसा लगता है।

+0

यह शानदार लग रहा है! पता नहीं था कि जीसीडी भी ऐसा कर सकता है! जवाब के लिए धन्यवाद! – guitarflow

+0

यह सटीक कोको टाइमर खोजों के लिए खोज परिणामों में ऊंचा होना चाहिए। यह कमाल का है। – uchuugaka

1

हो सकता है आप को बढ़ावा देने के लिए टाइमर का उपयोग कर सकते,

http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/tutorial/tuttimer2.html, ट्यूटोरियल सेकंड के लिए उदाहरण दे लेकिन आप यह भी नीचे का उपयोग कर अर्थात् मिलीसेकेंड उपयोग कर सकते हैं ..

बढ़ावा :: posix_time :: मिलीसेकंड (...)

6

आप सीधे ऐप्पल से जीसीडी का उपयोग कर सकते हैं। मैक ओएस एक्स पर, जीसीडी v10.7 के बाद उपलब्ध है।

double delayInMilliseconds = 100.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInMilliseconds * NSEC_PER_MSEC)); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    // callback invocation 
}); 
+0

बिल्कुल सही! धन्यवाद। इसमें देखेंगे। – guitarflow