clock() फ़ंक्शन
यहां हम देखेंगे कि C++ में clock() का उपयोग कैसे करें। यह clock() <time.h> या <ctime> हेडर फाइल में मौजूद है। यहां हम इस clock() फ़ंक्शन का उपयोग करके किसी प्रोसेस का बीता हुआ समय ढूंढेंगे।
बीता हुआ समय गणना करना
बीता हुआ समय प्राप्त करने के लिए, हम टास्क की शुरुआत में clock() का उपयोग करके समय प्राप्त कर सकते हैं, और टास्क के अंत में, फिर मानों को घटाकर अंतर प्राप्त कर सकते हैं। उसके बाद हम अंतर को CLOCKS_PER_SEC (प्रति सेकंड क्लॉक टिक्स की संख्या) से विभाजित करके प्रोसेसर समय प्राप्त करेंगे।
उदाहरण: उपयोगकर्ता इनपुट तक समय मापना
#include <iostream>
#include <ctime>
using namespace std;
void take_enter() {
cout << "Press enter to stop the counter" << endl;
while (true) {
if (getchar())
break;
}
}
int main() {
// take_enter() द्वारा लिया गया समय गणना करें
clock_t t;
t = clock();
cout << "Timer starts\n";
take_enter();
cout << "Timer ends \n";
t = clock() - t;
double time_taken = ((double)t) / CLOCKS_PER_SEC; // बीता हुआ समय गणना करें
cout << "The program took " << time_taken << " seconds to execute";
return 0;
}
आउटपुट
Timer starts Press enter to stop the counter Timer ends The program took 3.546 seconds to execute
महत्वपूर्ण बिंदु
clock() क्या मापता है?
- CPU समय, वॉल-क्लॉक समय नहीं
- सभी थ्रेड्स द्वारा उपयोग किया गया कुल CPU समय (POSIX पर)
- यदि प्रोग्राम I/O या स्लीप पर इंतजार कर रहा है, तो वह समय शामिल **नहीं** होता (आमतौर पर)
प्रकार और स्थिरांक
clock_t clock(); // रिटर्न टाइप: clock_t (आमतौर पर long या long long) #define CLOCKS_PER_SEC 1000000 // प्रति सेकंड टिक्स (POSIX पर आमतौर पर 1,000,000)
सटीकता विचार
- रिजॉल्यूशन सिस्टम-निर्भर है (आमतौर पर 1μs से 1ms)
- बहुत छोटे अंतराल के लिए,
std::chrono::high_resolution_clock(C++11) का उपयोग करें clock_tबहुत लंबे रन के लिए ओवरफ्लो हो सकता है
मॉडर्न C++ विकल्प: std::chrono (C++11)
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
using namespace std::chrono;
int main() {
auto start = high_resolution_clock::now();
cout << "Timer starts\n";
this_thread::sleep_for(seconds(2)); // 2 सेकंड सिम्युलेटेड वर्क
cout << "Timer ends\n";
auto end = high_resolution_clock::now();
auto duration = duration_cast(end - start);
cout << "Elapsed: " << duration.count() << " ms\n";
// अधिक सटीकता के लिए:
auto duration_us = duration_cast(end - start);
cout << "Elapsed: " << duration_us.count() << " μs\n";
return 0;
}
तुलना
| विशेषता | clock() | std::chrono::high_resolution_clock |
|---|---|---|
| क्या मापता है | CPU समय | वॉल-क्लॉक समय |
| थ्रेड जागरूकता | सभी थ्रेड्स का योग | वास्तविक बीता समय |
| सटीकता | माइक्रोसेकंड (सिस्टम-निर्भर) | नैनोसेकंड (हार्डवेयर-निर्भर) |
| पोर्टेबिलिटी | C स्टैंडर्ड | C++11 स्टैंडर्ड |