Tôi muốn tìm hiểu xem một số đoạn mã thực hiện bao lâu (xấp xỉ). Một cái gì đó như thế này:Làm cách nào để đo thời gian trong C?
startStopwatch();
// do some calculations
stopStopwatch();
printf("%lf", timeMesuredInSeconds);
Làm thế nào?
Tôi muốn tìm hiểu xem một số đoạn mã thực hiện bao lâu (xấp xỉ). Một cái gì đó như thế này:Làm cách nào để đo thời gian trong C?
startStopwatch();
// do some calculations
stopStopwatch();
printf("%lf", timeMesuredInSeconds);
Làm thế nào?
Bạn có thể sử dụng phương pháp clock
trong time.h
Ví dụ:
clock_t start = clock();
/*Do something*/
clock_t end = clock();
float seconds = (float)(end - start)/CLOCKS_PER_SEC;
Bạn có thể sử dụng time.h thư viện, đặc biệt là time và difftime chức năng:
/* difftime example */
#include <stdio.h>
#include <time.h>
int main()
{
time_t start,end;
double dif;
time (&start);
// Do some calculation.
time (&end);
dif = difftime (end,start);
printf ("Your calculations took %.2lf seconds to run.\n", dif);
return 0;
}
(Ví dụ chuyển thể từ các trang web khác nhau được liên kết ở trên.)
Xin lưu ý rằng phương pháp này chỉ có thể cung cấp số giây chính xác - time_t
ghi lại số giây từ UNIX epoch (ngày 1 tháng 1 năm 1970).
Tính năng này chỉ mất vài giây. Và ví dụ của bạn thực sự không sử dụng '
Xin lỗi, chữ 'c' là lỗi đánh máy - thư viện ctime được định nghĩa trong 'time.h'. Và có, nó chỉ cho độ chính xác vài giây. Xem xét các poster nói "khoảng", tôi xem xét đủ. – Stephen
Nếu bạn không cần độ phân giải tuyệt vời, bạn có thể sử dụng GetTickCount(): http://msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx (Nếu nó không phải là chẩn đoán đơn giản của riêng bạn, thì lưu ý rằng số này có thể quấn quanh, vì vậy bạn sẽ cần phải xử lý với một số học nhỏ).
QueryPerformanceCounter là một tùy chọn hợp lý khác. (Nó cũng được mô tả trên MSDN)
Tôi sẽ sử dụng các chức năng QueryPerformanceCounter và QueryPerformanceFrequency của API Windows. Gọi trước đây trước và sau khối và trừ (hiện tại − cũ) để có được số lượng "bọ ve" giữa các cá thể. Chia giá trị này bằng giá trị thu được bằng hàm thứ hai để nhận thời lượng tính bằng giây.
GetTickCount().
#include <windows.h>
void MeasureIt()
{
DWORD dwStartTime = GetTickCount();
DWORD dwElapsed;
DoSomethingThatYouWantToTime();
dwElapsed = GetTickCount() - dwStartTime;
printf("It took %d.%3d seconds to complete\n", dwElapsed/1000, dwElapsed - dwElapsed/1000);
}
Nền tảng của bạn là gì? – pmod
@Pmod Bạn có ý nghĩa gì bởi nền tảng? Hệ điều hành của tôi là Windows. – snakile
Bạn muốn đạt được độ phân giải nào và bạn có thể chịu được bao nhiêu chi phí tích lũy? –