Timing trong C++

Trong header file time.h có định nghĩa kiểu clock_t (integer type), function clock_t clock(), trả về thời gian hệ thống tại thời điểm được gọi, và hằng số CLOCKS_PER_SEC là số lượng đơn vị thời gian (nhận được từ clock()) trong một giây.
Anh thử lại đoạn code như ở dưới xem có được không nhé:

#include <time.h>
...
clock_t stime, etime;
double dtime;

stime = clock();
...
etime = clock();
dtime = (etime - stime)/(CLOCK_PER_SEC / (double)1000.0);

cout<<"time : "<< dtime;

Ở trên ngầm giả thiết là CLOCK_PER_SEC là nhỏ hơn 1000. (Chưa từng thấy lớn hơn, nhưng em cũng không chắc lắm).
 
Linh, thử đổi code của cậu một chút như thế này

stime = time(NULL);
...
etime = time(NULL);

cout<<difftime(stime, etime);

difftime() format là difftime(starttime, endtime)
 
To Quang Anh : lúc đầu anh cũng làm như em nói nhưng gcc của Cygwin nó báo lỗi không có type clock_t hehe, chả hiểu tại sao. Server trong trường tự nhiên teo nên không telnet vào xem nó có chạy trong trường được không.

To monkey : thanks, tớ thử rồi nhưng nó vẫn ra zero :) Lúc đầu có lúc tớ để ngược difftime(etime,stime) thì nó còn ra 1 số âm, lúc để đúng thì toàn ra zero thôi hehhe

Còn ai có cao kiến nào khác không nhỉ :)
 
Lúc đầu có lúc tớ để ngược difftime(etime,stime) thì nó còn ra 1 số âm, lúc để đúng thì toàn ra zero thôi hehhe

:)

Thế này dễ quá, cứ để nó ra số âm đi rồi đảo dấu lại mà hiện ra nếu số đó đúng
 
Cảm ơn tất cả mọi người, hình như là Linh làm được rồi thì phải :)

dùng clock() nhưng dùng type time_t thay vì clock_t .
Cái thằng lúc đầu linh bảo không được là vì nó lại vác CLOCKS_PER_SEC chia cho 1000 (không biết để làm gì) thành ra kết quả chả có ý nghĩa gì cả, chia cho CLOCKS_PER_SEC là ok :)

Mà cygwin CLOCKS_PER_SEC có 1000 trong khi thằng server ở trường tận 1000000 ặc ặc
 
Đúng như thế hả anh? Hồi trước em cũng có dùng hàm clock() nhưng lâu rồi không dùng. Thực ra trước đây cũng không bao giờ chia cho CLOCKS_PER_SEC nhưng hôm trước tra trên mạng nên ghi lại như thế, thì ra là nhầm :">.
 
The problem might be that Berkeley-derived systems, including 4.3BSD, inherited a version of times from Version 7 that did not return the wall clock time. Instead, this older version returned 0 if OK or -1 on error. 4.3+BSD supports the POSIX.1 version.

Cheer,
ĐTrang
 
Back
Bên trên