2011-04-02 25 views
7

सी ++ में सबसे अच्छा, सबसे सटीक टाइमर क्या है?सी ++ में सबसे अच्छा, सबसे सटीक टाइमर क्या है?

+6

पूर्णतया सर्वश्रेष्ठ टाइमर शायद एक परमाणु घड़ी से जुड़े कुछ एम्बेडेड डिवाइस पर चल रहे आरटीओएस पर कुछ सिस्टम-विशिष्ट कॉल होगा। क्या आप यही खोज रहे हैं, या आप "सर्वश्रेष्ठ, सबसे सटीक टाइमर" से थोड़ा कम कुछ के लिए व्यवस्थित करने के इच्छुक हैं? –

+0

@ जेम्स और तारों के साथ यात्रा करने के लिए लिया गया समय, और संसाधित/आदि को भी अनुमानित विचार में लिया जाता है? (उस वाक्य को कोई समझ नहीं आया ...) –

+0

इसके अलावा, ऐसा उच्च रिज़ॉल्यूशन टाइमर CPU खा सकता है। –

उत्तर

12

इसका उत्तर प्लेटफ़ॉर्म-विशिष्ट है। ऑपरेटिंग सिस्टम समय के ट्रैक रखने के लिए ज़िम्मेदार है और इसके परिणामस्वरूप, सी ++ भाषा स्वयं ऐसा करने के लिए कोई भाषा संरचना या अंतर्निर्मित कार्य नहीं देती है। http://msdn.microsoft.com/en-us/library/ms644906(v=vs.85).aspx

  • यूनिक्स - setitimer: http://linux.die.net/man/2/setitimer
  • एक पार मंच - SetTimer

    • Windows API:

      हालांकि, यहां मंच पर निर्भर टाइमर के लिए कुछ संसाधन दिए गए हैं समाधान boost::asio::deadline_timer हो सकता है।

    +2

    हास्यास्पद समय आधारित महत्वपूर्ण अनुप्रयोगों के लिए प्रासंगिक उत्तर – Enders

    2

    खिड़कियों यह QueryPerformanceCounter होगा, हालांकि यह संभव एक बाहरी अल्ट्रा उच्च संकल्प टाइमर ड्राइवर के लिए एक C++ इंटरफ़ेस है कि राशि के रूप में आप किसी भी स्थिति निर्दिष्ट नहीं किया देखकर

    +0

    धन्यवाद, लेकिन लिनक्स/यूनिक्स पर क्या है? –

    +0

    @ जोश: ऊपर मेरा जवाब देखें। –

    2

    सी ++ मानक कहना नहीं है के तहत समय के बारे में एक बहुत कुछ। <ctime> शीर्षलेख के माध्यम से सी से विरासत में मिली कुछ विशेषताएं हैं।

    फ़ंक्शन clock उप-द्वितीय परिशुद्धता प्राप्त करने का एकमात्र तरीका है, लेकिन सटीक एक सेकंड के रूप में कम हो सकता है (इसे मैक्रो CLOCKS_PER_SEC द्वारा परिभाषित किया गया है)। इसके अलावा, यह वास्तविक समय को बिल्कुल भी मापता नहीं है, लेकिन प्रोसेसर समय।

    फ़ंक्शन time वास्तविक समय मापता है, लेकिन (आमतौर पर) केवल निकटतम दूसरे तक।

    उपसेकंद परिशुद्धता के साथ वास्तविक समय को मापने के लिए, आपको एक गैर-मानक पुस्तकालय की आवश्यकता है।

    10

    सी ++ 11 आप portably साथ सर्वोच्च संकल्प टाइमर के लिए प्राप्त कर सकते हैं में:

    #include <iostream> 
    #include <chrono> 
    #include "chrono_io" 
    
    int main() 
    { 
        typedef std::chrono::high_resolution_clock Clock; 
        auto t1 = Clock::now(); 
        auto t2 = Clock::now(); 
        std::cout << t2-t1 << '\n'; 
    } 
    

    उदाहरण आउटपुट:

    74 nanoseconds 
    

    "chrono_io" के साथ आई/ओ मुद्दों को कम करने के एक विस्तार है इन नए प्रकारों और स्वतंत्र रूप से here उपलब्ध है।

    बूस्ट में उपलब्ध <chrono> का कार्यान्वयन भी है (अभी भी टिप-ऑफ-ट्रंक पर हो सकता है, यह सुनिश्चित नहीं है कि इसे जारी किया गया है)।

    +0

    मैंने 300 मिलियन बार के लिए अब() फ़ंक्शन चलाने की कोशिश की और लगभग 100 गुना हैं कि टी 1 और टी 2 की विलंबता/अंतर 10 माइक्रोसॉन्ड से बड़ा है। क्या यह संदर्भ स्विचिंग या कुछ और वजह से है?धन्यवाद – user1687035

    +0

    @ user1687035: संदर्भ स्विचिंग एक संभावित अपराधी है। यह किस मंच पर निर्भर करता है, जो कंपाइलर (यहां तक ​​कि कंपाइलर संस्करण), मशीन पर अन्य प्रक्रियाएं क्या हैं, आदि। एक सामान्य उद्देश्य कंप्यूटर एक बड़ी घड़ी नहीं है, जब तक कि यह लगातार अन्य कंप्यूटरों से पूछता है कि यह कितना समय है। ;-) मैकोज़ पर मुझे काफी ठोस समय मिलते हैं * जब तक * टाइम मशीन का बैक अप नहीं होता है, स्पॉटलाइट इंडेक्सिंग होता है, या मेल ला रहा है। –

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