因為經常需要統計代碼的運行時間,所以計時功能就顯得很重要,
記錄一下現在喜歡用的計時方式,供日后查閱。
1.下面是計時主函數,
bool TimeStaticMine(int id,const char* type) { struct TimeInfo { long long accu_num; long long accu_sec; long long accu_usec; struct timeval st; struct timeval ed; long long this_time_usec; char type[64]; }; static TimeInfo info[50]; if(id<0) { for(int i=0;i<50;i++)memset(info+i,0,sizeof(TimeInfo)); return true; } if(type==NULL) { gettimeofday(&info[id].st,NULL); return true; } gettimeofday(&info[id].ed,NULL); info[id].this_time_usec=((info[id].ed.tv_sec)-(info[id].st.tv_sec))*1000000 + ((info[id].ed.tv_usec)-(info[id].st.tv_usec)); if(info[id].type[0]=='\0') strcpy(info[id].type,type); bool needPrint=false; info[id].accu_num++; info[id].accu_usec+=info[id].this_time_usec; char typeData[100]; sprintf(typeData,"%d-%s",id,info[id].type); char tmp[256]; sprintf(tmp,"=========step: %s, this time: %lld ms=========",typeData,info[id].this_time_usec / 1000); printf("%s\n",tmp); return true; }
2.用法如下
在每個要計時的函數上定義一個TimeStaticMine,第一個參數為計時id,第二個參數為計時說明。
如下例子分別記錄了adjustPic 和probAll兩個函數的運行時間。