जैसा कि दूसरों ने पहले ही नोट किया है, सी मानक पुस्तकालय में समय () फ़ंक्शन का एक सेकंड से बेहतर रिज़ॉल्यूशन नहीं है। एकमात्र पूर्ण पोर्टेबल सी फ़ंक्शन जो बेहतर रिज़ॉल्यूशन प्रदान कर सकता है, वह घड़ी () प्रतीत होता है, लेकिन यह प्रोसेसर के समय को वॉलकॉक के समय के बजाय मापता है। यदि कोई अपने को POSIX प्लेटफार्मों (जैसे लिनक्स) पर सीमित करने के लिए सामग्री है, तो घड़ी_गेटटाइम () फ़ंक्शन एक अच्छा विकल्प है।
C ++ 11 के बाद से, बेहतर समय सुविधाएं हैं उपलब्ध हैं जो एक ऐसे फॉर्म में बेहतर रिज़ॉल्यूशन प्रदान करती हैं जो विभिन्न कंपाइलरों और ऑपरेटिंग सिस्टमों में बहुत पोर्टेबल होना चाहिए। इसी तरह, बढ़ावा :: डेटाइम लाइब्रेरी अच्छी उच्च-रिज़ॉल्यूशन टाइमिंग कक्षाएं प्रदान करती है जो अत्यधिक पोर्टेबल होनी चाहिए।
इनमें से किसी भी सुविधा का उपयोग करने में एक चुनौती सिस्टम घड़ी को क्वेरी करके शुरू की गई देरी है। घड़ी_गेटटाइम (), बूस्ट :: डेटाइम और एसटी :: क्रोनो के साथ प्रयोग करने से , यह देरी आसानी से माइक्रोसेकंड का मामला हो सकता है। इसलिए, अपने कोड के किसी भी हिस्से की अवधि को मापते समय, आपको इस आकार के आसपास माप त्रुटि होने की अनुमति देने की आवश्यकता होती है, या किसी तरह से उस शून्य-त्रुटि के लिए सही करने का प्रयास करना चाहिए। आदर्श रूप से, आप अच्छी तरह से अपने फ़ंक्शन द्वारा लिए गए समय के कई मापों को इकट्ठा कर सकते हैं, और कई रनों के दौरान लिए गए औसत या अधिकतम / न्यूनतम समय की गणना कर सकते हैं।
के साथ मदद करने के लिए इन सभी पोर्टेबिलिटी और आँकड़े-सभा के मुद्दों, मैं CXX-rtimers पर पुस्तकालय उपलब्ध विकासशील किया गया है Github जो सी ++ कोड के समय ब्लॉक के लिए एक सरल एपीआई प्रदान करने के लिए, शून्य त्रुटियों कंप्यूटिंग की कोशिश करता है, और रिपोर्टिंग एकाधिक टाइमर से आँकड़े एम्बेडेड आपके कोड में यदि आपके पास C ++ 11 संकलक है, तो आप बस #include <rtimers/cxx11.hpp>
, और कुछ का उपयोग करें:
void expensiveFunction() {
static rtimers::cxx11::DefaultTimer timer("expensiveFunc");
auto scopedStartStop = timer.scopedStart();
// Do something costly...
}
प्रोग्राम से बाहर निकलने पर, आपको std :: cerr जैसे लिखे गए समय आँकड़े का सारांश मिलेगा:
Timer(expensiveFunc): <t> = 6.65289us, std = 3.91685us, 3.842us <= t <= 63.257us (n=731)
जो औसत समय, इसके मानक-विचलन, ऊपरी और निचली सीमाओं को दिखाता है, और इस फ़ंक्शन को कितनी बार कहा गया।
यदि आप लिनक्स-विशिष्ट टाइमिंग फ़ंक्शन का उपयोग करना चाहते हैं, तो आप कर सकते हैं #include <rtimers/posix.hpp>
, या यदि आपके पास बूस्ट लाइब्रेरी हैं, लेकिन पुराने सी ++ कंपाइलर हैं, तो आप कर सकते हैं #include <rtimers/boost.hpp>
। इन टाइमर कक्षाओं के संस्करण भी हैं जो कई थ्रेड्स से सांख्यिकीय समय की जानकारी एकत्र कर सकते हैं। ऐसे तरीके भी हैं जो आपको सिस्टम घड़ी के तुरंत दो निरंतर प्रश्नों से जुड़े शून्य-त्रुटि का अनुमान लगाने की अनुमति देते हैं।
time()
एक अलग मूल्य देता है।