clock()
आपकी प्रक्रिया द्वारा उपयोग किए गए CPU समय को मापने के लिए, दीवार घड़ी के समय को नहीं देखें। जब आपके पास एक साथ चलने वाले एकाधिक थ्रेड होते हैं, तो आप स्पष्ट रूप से CPU समय के माध्यम से बहुत तेजी से जला सकते हैं।
यदि आप दीवार घड़ी निष्पादन समय जानना चाहते हैं, तो आपको उचित फ़ंक्शन का उपयोग करने की आवश्यकता है। एएनएसआई सी में केवल एक ही time()
है, जो आमतौर पर केवल 1 सेकंड का संकल्प होता है।
हालांकि, जैसा कि आपने कहा है कि आप POSIX का उपयोग कर रहे हैं, इसका मतलब है कि आप clock_gettime()
का उपयोग कर सकते हैं, जिसे time.h
में परिभाषित किया गया है। विशेष रूप से CLOCK_MONOTONIC
घड़ी सबसे अच्छा इस के लिए उपयोग करने के लिए है:
struct timespec start, finish;
double elapsed;
clock_gettime(CLOCK_MONOTONIC, &start);
/* ... */
clock_gettime(CLOCK_MONOTONIC, &finish);
elapsed = (finish.tv_sec - start.tv_sec);
elapsed += (finish.tv_nsec - start.tv_nsec)/1000000000.0;
(ध्यान दें कि मैं elapsed
की गणना किया है ध्यान से यह सुनिश्चित करें कि सटीक नहीं खोया है, जब बहुत ही कम अंतराल समय)।
अपने OS CLOCK_MONOTONIC
(जो आप sysconf(_SC_MONOTONIC_CLOCK)
साथ रनटाइम पर जांच कर सकते हैं) प्रदान नहीं करता है, तो आप CLOCK_REALTIME
फ़ॉलबैक के रूप में उपयोग कर सकते हैं - लेकिन ध्यान दें उत्तरार्द्ध नुकसान यह है कि यह करता है, तो सिस्टम का समय गलत परिणाम उत्पन्न होगा है आपकी प्रक्रिया चल रही है, जबकि बदल गया है।
देखें [क्या gettimeofday() microsecond संकल्प होने की गारंटी है?] (Http://stackoverflow.com/questions/88/is-gettimeofday-guaranteed-to-be-of-microsecond-resolution) –
यह उत्तर देखें एक पोर्टेबल समाधान के लिए: http://stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c/37920181#37920181 –