Unix/Linux計算プログラムが消費する時間(ミリ秒)
time(NULL)
を用いて得られたのは1970年1月1日から現在までの秒であり,この精度は不十分な場合が多い.ミリ秒レベルの精度を得るには、gettimeofday
を使用する必要があります.直接コード:
#include <sys/time.h> #include <stdlib.h> #include <stdio.h> #include <math.h> // Return 1 if the difference is negative, otherwise 0. int timeval_subtract(struct timeval *result, struct timeval *t2, struct timeval *t1) { long int diff = (t2->tv_usec + 1000000 * t2->tv_sec) - (t1->tv_usec + 1000000 * t1->tv_sec); result->tv_sec = diff / 1000000; result->tv_usec = diff % 1000000; return (diff<0); } void timeval_print(struct timeval *tv) { char buffer[30]; time_t curtime; printf("%ld.%06ld", tv->tv_sec, tv->tv_usec); curtime = tv->tv_sec; strftime(buffer, 30, "%m-%d-%Y %T", localtime(&curtime;)); printf(" = %s.%06ld
", buffer, tv->tv_usec); } int main() { struct timeval tvBegin, tvEnd, tvDiff; // begin gettimeofday(&tvBegin;, NULL); timeval_print(&tvBegin;); // lengthy operation int i,j; for(i=0;i<999999L;++i) { j=sqrt(i); } //end gettimeofday(&tvEnd;, NULL); timeval_print(&tvEnd;); // diff timeval_subtract(&tvDiff;, &tvEnd;, &tvBegin;); printf("%ld.%06ld
", tvDiff.tv_sec, tvDiff.tv_usec); return 0; }