Tôi vừa viết chương trình C++ ngắn này để ước tính số lượng đồng hồ thực tế trên mỗi giây.Tại sao CLOCKS_PER_SEC không phải là số đồng hồ thực tế mỗi giây?
#include <iostream>
#include <time.h>
using namespace std;
int main() {
for(int i = 0; i < 10 ; i++) {
int first_clock = clock();
int first_time = time(NULL);
while(time(NULL) <= first_time) {}
int second_time = time(NULL);
int second_clock = clock();
cout << "Actual clocks per second = " << (second_clock - first_clock)/(second_time - first_time) << "\n";
cout << "CLOCKS_PER_SEC = " << CLOCKS_PER_SEC << "\n";
}
return 0;
}
Khi tôi chạy chương trình, tôi nhận được kết quả như sau.
Actual clocks per second = 199139
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 638164
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 610735
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 614835
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 642327
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 562068
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 605767
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 619543
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 650243
CLOCKS_PER_SEC = 1000000
Actual clocks per second = 639128
CLOCKS_PER_SEC = 1000000
Tại sao số lượng đồng hồ thực tế trên mỗi giây không khớp với CLOCKS_PER_SEC? Chúng thậm chí không bằng nhau. Những gì đang xảy ra ở đây?
Lưu ý rằng bạn có thể lặp lại ít hơn một giây. Nếu bạn gọi 'time', và còn 200ms cho giây tiếp theo, bạn sẽ lặp lại ~ 200ms. Điều này có lẽ không phải là vấn đề chính ở đây, dù sao đi nữa. – mfontanini
Phải, tôi nhận ra rằng đó là lý do tại sao vòng lặp đầu tiên của vòng lặp trả về một kết quả nhỏ hơn các lần lặp tiếp theo. Nhưng câu hỏi của tôi là về các lần lặp tiếp theo. Tôi đoán tôi nên làm rõ điều đó. –
Bây giờ bạn vẫn nhận được chi phí của cout của bạn trong mỗi lần lặp tiếp theo. Chờ cho đến khi bạn bắt đầu một giây trước khi bắt đầu phép đo. – David