ansiのC言語で用意されているtime関数では現在時刻をミリ秒まで取得できません。そこでLinuxならではの取得方法の覚え書きです
gettimeofday関数を用いてミリ秒を取得します
以下のサンプルではミリ秒単位で現在時刻を取得し、2つの時間の差を求めています
#include#include #include #include #include struct my_tm { time_t tim; // yyyymmddhhmmss long msec; // milli sec }; static struct my_tm *get_now_tm(){ struct my_tm *qt; struct tm *tmp; struct timeval tv; qt=(struct my_tm*)malloc(sizeof(struct my_tm)); if(qt == NULL)return NULL; gettimeofday(&tv,NULL); tmp=localtime(&tv.tv_sec); qt->tim=mktime(tmp); qt->msec=tv.tv_usec/1000; printf("%04d/%02d/%02d %02d:%02d:%02d:%3d\n", tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday, tmp->tm_hour, tmp->tm_min, tmp->tm_sec, tv.tv_usec/1000); return qt; } // return milli second static inline long my_tm_cmptime(struct my_tm* now_t,struct my_tm* prev_t){ long diff_sec; long diff_msec; diff_sec=difftime(now_t->tim,prev_t->tim); diff_msec=now_t->msec-prev_t->msec; return diff_sec*1000+diff_msec; } int main(){ int i,b; struct my_tm *q1; struct my_tm *q2; long dif; q1=get_now_tm(); sleep(2); // 2秒あける b=0; for(i=0;i<1000000;i++) b++; // +αあける q2=get_now_tm(); dif=my_tm_cmptime(q2,q1); printf("%d\n",dif); free(q1); free(q2); }