সি-এ একটি ফাংশন বা কোড ব্লক এক্সিকিউট হতে কতক্ষণ লাগলো তা মাপার জন্য <time.h> হেডারের clock() ফাংশন ব্যবহার করা হয়। এটি প্রসেসর টাইম (CPU time) রিটার্ন করে, ওয়াল-ক্লক টাইম (Real time) নয়।
পদ্ধতি
clock_t start = clock();— শুরুতে টাইম নিন- কোড/ফাংশন এক্সিকিউট করুন
clock_t end = clock();— শেষে টাইম নিনdouble cpu_time = (double)(end - start) / CLOCKS_PER_SEC;— সেকেন্ডে কনভার্ট করুন
উদাহরণ
#include <stdio.h>
#include <time.h>
void take_enter() {
printf("Press enter to stop the counter\n");
while (1) {
if (getchar())
break;
}
}
int main() {
clock_t t = clock();
printf("Timer starts\n");
take_enter();
printf("Timer ends\n");
t = clock() - t;
double time_taken = ((double)t) / CLOCKS_PER_SEC;
printf("The program took %f seconds to execute\n", time_taken);
return 0;
}
আউটপুট (নমুনা)
Timer starts
Press enter to stop the counter
Timer ends
The program took 5.218000 seconds to execute
গুরুত্বপূর্ণ পার্থক্য
| মেট্রিক | clock() | time() / gettimeofday() / clock_gettime() |
|---|---|---|
| কী মাপে | CPU Time (প্রসেসর ব্যবহার করা সময়) | Wall-clock Time (রিয়েল ওয়ার্ল্ড টাইম) |
| মাল্টিথ্রেডে | সকল থ্রেডের CPU টাইম যোগফল | রিয়েল টাইম |
| স্লিপ/ওয়াইট | গণনা হয় না | গণনা হয় |
| রেজোলিউশন | সিস্টেম-নির্ভর (সাধারণত ১ms-১μs) | উচ্চ (ন্যানোসেকেন্ড পর্যন্ত) |
উন্নত টাইমিং (C11/C++11 এবং পরবর্তী)
// C11: timespec_get (TIME_UTC)
// POSIX: clock_gettime(CLOCK_MONOTONIC, &ts) — সবচেয়ে সঠিক ইন্টারভ্যাল টাইমিং
// C++11: std::chrono::high_resolution_clock
C++11 উদাহরণ
#include <chrono>
#include <iostream>
int main() {
auto start = std::chrono::high_resolution_clock::now();
// ... কোড ...
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
std::cout << "Time: " << duration.count() << " ms\n";
return 0;
}
সুপারিশ
- সিম্পল CPU টাইমিংয়ের জন্য
clock()ঠিক আছে - বেঞ্চমার্কিং, প্রোফাইলিং, রিয়েল-টাইম মাপার জন্য
clock_gettime(CLOCK_MONOTONIC)বাstd::chronoব্যবহার করুন CLOCKS_PER_SECসাধারণত ১,০০০,০০০ (POSIX) বা ১,০০০ (Windows) — ডাবলে কাস্ট করুন