Hàm clock() trong <ctime> trả về số "clock ticks" (nhịp đồng hồ) CPU mà tiến trình đã tiêu thụ từ khi bắt đầu. Dùng để đo thời gian thực thi CPU (không phải wall-clock time).
Công thức
thời_gian_giây = (clock_cuối - clock_đầu) / CLOCKS_PER_SEC
Ví dụ: Đo thời gian chờ người dùng nhấn Enter
#include <iostream>
#include <ctime>
using namespace std;
void wait_for_enter() {
cout << "Nhan Enter de dung dem..." << endl;
while (true) {
if (getchar()) break;
}
}
int main() {
clock_t start = clock(); // Lấy thời điểm bắt đầu
cout << "Bat dau dem..." << endl;
wait_for_enter();
cout << "Ket thuc dem." << endl;
clock_t end = clock(); // Lấy thời điểm kết thúc
double cpu_time = static_cast<double>(end - start) / CLOCKS_PER_SEC;
cout << "Thoi gian CPU: " << cpu_time << " giay" << endl;
}
Kết quả mẫu
Bat dau dem... Nhan Enter de dung dem... Ket thuc dem. Thoi gian CPU: 3.546 giay
Lưu ý quan trọng
| Đặc điểm | clock() | chrono::steady_clock |
|---|---|---|
| Đo lường | CPU time | Wall-clock time |
| Độ chính xác | Thấp (~ms) | Cao (nano/vi giây) |
| Thread | Tổng tất cả thread | Thời gian thực |
| Chuẩn | C (C++98) | C++11 |
Ví dụ so sánh
#include <iostream>
#include <ctime>
#include <chrono>
#include <thread>
int main() {
// clock() - CPU time
clock_t c1 = clock();
this_thread::sleep_for(chrono::seconds(1)); // Ngủ 1 giây (không tốn CPU)
clock_t c2 = clock();
cout << "clock(): " << double(c2-c1)/CLOCKS_PER_SEC << "s\n";
// chrono - wall time
auto t1 = chrono::steady_clock::now();
this_thread::sleep_for(chrono::seconds(1));
auto t2 = chrono::steady_clock::now();
cout << "chrono: " << chrono::duration<double>(t2-t1).count() << "s\n";
}
Kết quả
clock(): 0.000123s chrono: 1.000456s
clock() gần như 0 vì sleep không tiêu thụ CPU. chrono đo đúng 1 giây thực.
Khuyến nghị
- Đo hiệu năng thuật toán (CPU-bound):
clock()hoặcchrono::high_resolution_clock - Đo thời gian thực (I/O, network, sleep):
chrono::steady_clock - C++11+: Ưu tiên
<chrono>- chính xác hơn, type-safe, cross-platform