2009-12-12 14 views
8

बस पृष्ठभूमि के रूप में, मैं कोको में एक आवेदन बना रहा हूं। यह एप्लिकेशन मूल रूप से दूसरे वातावरण में सी ++ में मौजूद था। मैं उद्देश्य-सी में जितना संभव हो उतना करना चाहता हूं।कोको में मिलीसेकंद समय अंतराल निर्धारित करना

मेरे प्रश्न हैं:

1) मैं कैसे एक पूर्णांक के रूप में के बीच अब गणना करते हैं, मिलीसेकेंड की संख्या और पिछले बार जब मैं के रूप में अब याद आया?

2) जब एक उद्देश्य-सी कार्यक्रम, time.h सहित में इस्तेमाल किया, की

घड़ी()

आपकी मदद के लिए धन्यवाद इकाइयां हैं क्या।

उत्तर

14

आप CFAbsoluteTimeGetCurrent() का उपयोग कर सकते हैं लेकिन ध्यान रखें कि घड़ी दो कॉल के बीच बदल सकती है और आपको पेंच कर सकती है। यदि आप इसके खिलाफ सुरक्षा करना चाहते हैं तो आपको CACurrentMediaTime() का उपयोग करना चाहिए।

इनमें से वापसी का प्रकार क्रमशः CFAbsoluteTime और CFTimeInterval है, जो डिफ़ॉल्ट रूप से double दोनों हैं। इसलिए वे double परिशुद्धता के साथ सेकंड की संख्या वापस कर देते हैं। यदि आप वास्तव में एक पूर्णांक चाहते हैं तो आप mach_absolute_time() का उपयोग #include <mach/mach_time.h> में प्राप्त कर सकते हैं जो 64 बिट पूर्णांक देता है। इसे यूनिट रूपांतरण की थोड़ी आवश्यकता है, इसलिए उदाहरण कोड के लिए this link देखें। यह CACurrentMediaTime() आंतरिक रूप से उपयोग करता है, इसलिए शायद इसके साथ रहना सबसे अच्छा है।

दो कॉल के बीच अंतर की गणना करना स्पष्ट रूप से केवल एक घटाव है, अंतिम मान को याद रखने के लिए एक चर का उपयोग करें।

clock फ़ंक्शन के लिए यहां दस्तावेज़ देखें: clock()। मूल रूप से आपको वास्तविक समय प्राप्त करने के लिए CLOCKS_PER_SEC द्वारा वापसी मूल्य को विभाजित करने की आवश्यकता है।

+0

गैर-सी ++ - 'घड़ी' के लिए विशिष्ट दस्तावेज़ लिंक: http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/clock.3.html –

6

मैं एक पूर्णांक के रूप में गणना कैसे करूं, अब और पिछले समय के बीच मिलीसेकंड की संख्या अब मुझे याद है?

क्या कोई कारण है कि आपको मिलीसेकंड की अभिन्न संख्या के रूप में इसकी आवश्यकता है? किसी अन्य तारीख के बाद से अंतराल के लिए एनएसडीएटी से पूछना आपको सेकंड की फ्लोटिंग-पॉइंट संख्या देगा। यदि आपको वास्तव में मिलीसेकंड की आवश्यकता है, तो आप मिलीसेकंड की फ्लोटिंग-पॉइंट संख्या प्राप्त करने के लिए केवल 1000 तक गुणा कर सकते हैं। यदि आपको वास्तव में एक पूर्णांक की आवश्यकता है, तो आप फ़्लोटिंग-पॉइंट मान को गोल या छोटा कर सकते हैं।

आप इसे शुरू से आखिर तक, तो पूर्णांकों के साथ क्या निरपेक्ष इकाइयों में वर्तमान समय प्राप्त करने के लिए या तो UpTime या mach_absolute_time उपयोग करते हैं, AbsoluteToNanoseconds का उपयोग एक वास्तविक दुनिया इकाई के लिए कि कन्वर्ट करने के लिए करना चाहते हैं तो। जाहिर है, आपको मिलीसेकंड प्राप्त करने के लिए 1,000,000 तक विभाजित करना होगा।

QA1398mach_absolute_time चलता है, लेकिन UpTime आसान है, क्योंकि यह एक ही प्रकार AbsoluteToNanoseconds उपयोग करता है (नहीं "सूचक मज़ा" के रूप में technote में दिखाया गया है) देता है।

AbsoluteToNanoseconds एक UnsignedWide देता है, जो एक संरचना है। (मैक मशीन स्केलर 64-बिट मानों को संभालने से पहले यह सामान वापस आ गया है।) UnsignedWideToUInt64 फ़ंक्शन को स्केलर में बदलने के लिए इसका उपयोग करें। यह सिर्फ घटाव छोड़ देता है, जो आप सामान्य तरीके से करेंगे।

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