Dokładna funkcja do mierzenia czasu w C++

Ostatnio pisząc projekt na Algorytmy i Struktury Danych, musiałem zmierzyć czas sortowania poszczególnych algorytmów. Na początku chciałem użyć funkcji systemowej z biblioteki time.h lub ctime, ale niestety potrzebowałem dokładniejszej funkcji która zwróci mi czas w milisekundach. Swoją drogą ciekawe dlaczego funkcja difftime z powyższych bibliotek zwraca double`a,  jak i tak zawsze otrzymujemy w wyniku integer`a. Głupi przykład ze strony cplusplus.com:

#include <stdio.h> #include <time.h> int main () { time_t start,end; char szInput [256]; double dif; time (&start); printf ("Please, enter your name: "); gets (szInput); time (&end); dif = difftime (end,start); printf ("Hi %s.\n", szInput); printf ("It took you %.2lf seconds to type your name.\n", dif ); return 0; }
 

W rezultacie otrzymujemy np. (zawsze po kropce są zera):

Please, enter your name: Juan Soulie
Hi Pawel Nowak.
It took you 3.00 seconds to type your name.
 

Wracając do milisekund, dało mi się je policzyć dzięki funkcji gettimeofday, z biblioteki sys/time.h, która (nie będę już pisał, że niestety) działa tylko w środowisku Linux. Użycie jej jest bardzo proste, a oto i przykład:

timeval tim;
gettimeofday(&tim, NULL);
double t1=tim.tv_sec+(tim.tv_usec/1000000.0);
do_something_long();
gettimeofday(&tim, NULL);
double t2=tim.tv_sec+(tim.tv_usec/1000000.0);
printf(“%.6lf seconds elapsed\n”, t2-t1);

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s