2016-02-18 13 views
5

में chrono सेकंड प्राप्त करें उदाहरण में http://en.cppreference.com/w/cpp/chrono पर double में सेकंड मान प्राप्त किया जाता है। यह वह व्यवहार है जो मैं चाहता हूं। हालांकि, यह अंतर्निहित धारणा पर भरोसा करता है कि समय बिंदु घटाव एक मान उत्पन्न करता है जो सेकंड का प्रतिनिधित्व करता है। मुझे कुछ भी नहीं मिल रहा है जो बताता है कि क्यों एक अवधि फ्लोटिंग पॉइंट सेकंड उत्पन्न करती है जब कोई समय इकाइयां वास्तव में निर्दिष्ट नहीं होती हैं। auto का उपयोग किए बिना, क्या कोई दिखा सकता है कि फ्लोटिंग पॉइंट प्रकार में सेकेंड जैसे समय इकाई को स्पष्ट रूप से कैसे प्राप्त किया जाए, या मुझे दस्तावेज़ीकरण या स्पष्टीकरण के लिए इंगित करें कि उपर्युक्त रूपांतरण सेकेंड का प्रतिनिधित्व क्यों करता है?फ्लोट

प्रश्न में रूपांतरण अनिवार्य है:

std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now(); 
std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now(); 
std::chrono::duration<double> elapsed_seconds = end-start; // why does this represent seconds as opposed to some other time unit? 
double secondsInDouble = elapsed_seconds.count(); 

रूपांतरण के उदाहरण के लिए निम्नलिखित पोस्ट देखें।

How to get duration, as int milli's and float seconds from <chrono>?

C++ chrono - get duration as float or long long

getting chrono time in specific way

Chrono Timer Not Converting Seconds Properly

उत्तर

5

इस के अनुसार: http://en.cppreference.com/w/cpp/chrono/duration दूसरा टेम्पलेट पैरामीटर के लिए डिफ़ॉल्ट अनुपात 1:1 अर्थ सेकंड है।

अन्य मूल्य इसके सापेक्ष अनुपात हैं।

std::chrono::duration<double, std::ratio<1>> elapsed_seconds = end-start; 

कौन सा सेकंड जहाँ से सभी अन्य अनुपात प्राप्त कर रहे हैं होने के लिए परिभाषित किया गया है:

std::chrono::duration<double> elapsed_seconds = end-start; 

के बराबर है: उदाहरण के लिए std::chrono::milliseconds के लिए अनुपात 1:1000http://en.cppreference.com/w/cpp/numeric/ratio/ratio

तो यह बयान है।

जो भी इकाइयों end - startसेकंड में के रूप में std::ratio<1> परिवर्तित हो में परिभाषित कर रहे हैं।

आप मिलीसेकेंड में समय तुम कर सकते हो चाहता है तो:

std::chrono::duration<double, std::ratio<1, 1000>> elapsed_milliseconds = end-start; 

और end - start नया अनुपात के अनुसार परिवर्तित किया जाना चाहिए।

+0

मैं उस संदर्भ को देखता हूं जो मैंने संदर्भ के शीर्ष पर छोड़ा था: 'टिक अवधि एक संकलन-समय तर्कसंगत स्थिर है जो एक टिक से अगले तक सेकंड की संख्या का प्रतिनिधित्व करती है।' इसलिए 1: 1 का डिफ़ॉल्ट अनुपात दिया गया है, अवधि अवधि हमेशा एक सेकंड का प्रतिनिधित्व करता है। इसे मेरे संज्ञान में लाने के लिए धन्यवाद। – taz

+2

'std :: अनुपात <1, 1000>' 'std :: milli' के साथ प्रतिस्थापित किया जा सकता है। –

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