2013-04-29 2 views
20

मेरे पास यह प्रोग्राम है जो 2 अलग-अलग उदाहरणों के बीच समय अंतर को प्रिंट करता है, लेकिन यह सेकंड की सटीकता में प्रिंट करता है। मैं इसे मिलीसेकंड में प्रिंट करना चाहता हूं और दूसरा नैनोसेकंद अंतर में प्रिंट करना चाहता हूं।लिनक्स में सी से मिलीसेकंड और नैनोसेकंड की सटीकता में समय अंतर कैसे प्रिंट करें?

//Prints in accuracy of seconds 

#include <stdio.h> 
#include <time.h> 

int main(void) 
{ 
    time_t now, later; 
    double seconds; 

    time(&now); 
    sleep(2); 

    time(&later); 
    seconds = difftime(later, now); 

    printf("%.f seconds difference", seconds); 
} 

मैं इसे कैसे पूरा कर सकता हूं?

+1

क्या मंच आप पर कर रहे हैं? – interjay

+2

इससे मदद मिल सकती है: http://stackoverflow.com/questions/13610471/calculating-function-time-in-nanoseconds-in-c-code –

+0

@interjay: क्षमा करें मुझे यह उल्लेख करना चाहिए था कि यह लिनक्स है। जीसीसी कंपाइलर। – kingsmasher1

उत्तर

34

पहले time(7) मैन पेज पढ़ें।

फिर, आप clock_gettime(2) syscall का उपयोग कर सकते हैं (आपको इसे पाने के लिए -lrt लिंक करने की आवश्यकता हो सकती है)।

तो तुम

struct timespec tstart={0,0}, tend={0,0}; 
    clock_gettime(CLOCK_MONOTONIC, &tstart); 
    some_long_computation(); 
    clock_gettime(CLOCK_MONOTONIC, &tend); 
    printf("some_long_computation took about %.5f seconds\n", 
      ((double)tend.tv_sec + 1.0e-9*tend.tv_nsec) - 
      ((double)tstart.tv_sec + 1.0e-9*tstart.tv_nsec)); 

हार्डवेयर टाइमर एक nanosecond सटीकता की उम्मीद नहीं है की कोशिश कर सकते, भले ही वे एक nanosecond संकल्प दे। और कई मिलीसेकंड से कम समय अवधि मापने की कोशिश न करें: हार्डवेयर पर्याप्त वफादार नहीं है। आप कुछ घड़ी के संकल्प को पूछने के लिए clock_getres का भी उपयोग करना चाह सकते हैं।

+0

यह सच है कि मेरे लिए यह काम है। बहुत बहुत धन्यवाद @ बेसिल – EsmaeelE

5

timespec_get सी 11 कार्यान्वयन के समाधान के लिए गोल नैनोसेकंड तक लौटता है।

उदाहरण से: http://en.cppreference.com/w/c/chrono/timespec_get:

#include <stdio.h> 
#include <time.h> 

int main(void) 
{ 
    struct timespec ts; 
    timespec_get(&ts, TIME_UTC); 
    char buff[100]; 
    strftime(buff, sizeof buff, "%D %T", gmtime(&ts.tv_sec)); 
    printf("Current time: %s.%09ld UTC\n", buff, ts.tv_nsec); 
} 

आउटपुट:

Current time: 02/18/15 14:34:03.048508855 UTC 

अधिक यहाँ विवरण: https://stackoverflow.com/a/36095407/895245

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