下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C++獲取代碼運行時間如何獲取代碼運行時間在調試中,經(jīng)常需要計算某一段代碼的執(zhí)行時間,下面給出兩種常用的方式:第一種:使用GetTickCount函數(shù)#include<iostream>#include<windows.h>intmain(){DWORDstart_time=GetTickCount();{//此處為被測試代碼}DWORDend_time=GetTickCount();cout<<"Theruntimeis:"<<(end_time-start_time)<<"ms!"<<endl;//輸出運行時間return0;}GetTickCount函數(shù)返回從系統(tǒng)運行到現(xiàn)在所經(jīng)歷的時間(類型為DWORD),單位為ms,因為DWORD表示范圍的限制,所以使用此種方法存在限制,即系統(tǒng)的運行時間的ms表示不能超出DWORD的表示范圍。第二種:使用clock()函數(shù)#include<iostream>#include<time.h>intmain(){clock_tstart_time=clock();{//被測試代碼}clock_tend_time=clock();cout<<"Runningtimeis:"<<static_cast<double>(end_time-start_time)/CLOCKS_PER_SEC*1000<<"ms"<<endl;//輸出運行時間return0;}clock_t,clock()定義于time.h中,clock()返回從程序運行時刻開始的時鐘周期數(shù),類型為long.CLOCKS_PER_SEC定義了每秒鐘包含多少了時鐘單元數(shù),因為計算ms,所以*1000。由上面分析可知,用clock()函數(shù)計算運行時間,表示范圍一定大于GetTickCount()函數(shù),所以,建議使用clock()函數(shù)。1.使用CTime類CStringstr;//獲取系統(tǒng)時間CTimetm;tm=CTime::GetCurrentTime();str=tm.Format("現(xiàn)在時間是%Y年%m月%€1日%X");MessageBox(str,NULL,MB_OK);2:得到系統(tǒng)時間日期(使用GetLocalTime)SYSTEMTIMEst;CStringstrDate,strTime;GetLocalTime(&st);strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond);使用GetTickCount//獲取程序運行時間longt1=GetTickCount();//程序段開始前取得系統(tǒng)運行時間(ms)Sleep(500);longt2=GetTickCount();();//程序段結束后取得系統(tǒng)運行時間(ms)str.Format("time:%dms",t2-t1);//前后之差即程序運行時間AfxMessageBox(str);//獲取系統(tǒng)運行時間longt=GetTickCount();CStringstr,str1;str1.Format(”系統(tǒng)已運行%d時”,址600000);str=str1;t%=3600000;str1.Format("%d分",t/50000);str+=str1;t%=60000;str1.Format("%d秒",t/1000);str+=str1;AfxMessageBox(str);如何在VC6.0中得到一個程序的運行時間,也就是這個程序耗費的時鐘周期數(shù)〃C和C++的時間編程#include<iostream>#include<ctime>usingnamespacestd;intmain(){time_tbegin,end;begin=clock();//這里加上你的代碼end=clock();cout<<"runtime:"<<double(end-begin)/CLOCKS_PER_SEC<<endl;}unix時間相關,也是標準庫的這些在<time.h>timegm函數(shù)只是將structtm結構轉成time_t結構,不使用時區(qū)信息;time_ttimegm(structtm*tm);mktime使用時區(qū)信息time_tmktime(structtm*tm);timelocal函數(shù)是GNU擴展的與posix函數(shù)mktime相當time_ttimelocal(structtm*tm);gmtime函數(shù)只是將time_t結構轉成structtm結構,不使用時區(qū)信息;structtm*gmtime(consttime_t*clock);4.localtime使用時區(qū)信息structtm*localtime(consttime_t*clock);time獲取時間,stime設置時間time_tt;t=time(&t);stime其參數(shù)應該是GMT時間,根據(jù)本地時區(qū)設置為本地時間;intstime(time_t*tp)UTC=true表示采用夏時制;文件的修改時間等信息全部采用GMT時間存放,不同的系統(tǒng)在得到修改時間后通過localtime轉換成本地時間;設置時區(qū)推薦使用setup來設置;設置時區(qū)也可以先更變/etc/sysconfig/clock中的設置再將ln-fs/usr/share/zoneinfo/xxxx/xxx/etc/localtime才能重效time_t只能表示68年的范圍,即mktime只能返回1970-2038這一段范圍的time_t看看你的系統(tǒng)是否有time_t64,它能表示更大的時間范圍Window里面的一些不一樣的CTimeMFC類,好像就是把time.h封了個類,沒擴展CTimet=GetCurrentTime();SYSTEMTIME結構包含毫秒信息typedefstruct_SYSTEMTIME{WORDwYear;WORDwMonth;WORDwDayOfWeek;WORDwDay;WORDwHour;WORDwMinute;WORDwSecond;WORDwMilliseconds;}SYSTEMTIME,*PSYSTEMTIME;SYSTEMTIMEt1;GetSystemTime(&t1)CTimecurTime(t1);WORDms=t1.wMilliseconds;SYSTEMTIMEsysTm;::GetLocalTime(&sysTm);在time.h中的_strtime()//只能在windows中用chart[11];_strtime(t);puts(t);_timeb定義在SYS\TIMEB.H,有四個fieldsdstflagmillitmtimetimezonevoid_ftime(struct_timeb*timeptr);struct_timebtimebuffer;_ftime(&timebuffer);取當前時間:文檔講可以到ms,有人測試,好象只能到16ms!如何設定當前系統(tǒng)時間---windowsSYSTEMTIMEm_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wMonth=1;m_myLocalTime.wDay=1;m_myLocalTime.wHour=0;m_myLocalTime.wMinute=0;m_myLocalTime.wSecond=0;m_myLocalTime.wMilliseconds=0;lpSystemTime=&m_myLocalTime;if(SetLocalTime(lpSystemTime))〃此處換成SetSystemTime()也不行MessageBox("OK!");elseMessageBox("Error!");SYSTEMTIMEm_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wMonth=1;m_myLocalTime.wDay=1;lpSystemTime=&m_myLocalTime;if(SetDate(lpSystemTime))//此處換成SetSystemTime()也不行MessageBox("OK!");elseMessageBox("Error!");用clock()函數(shù),得到系統(tǒng)啟動以后的毫秒級時間,然后除以CLOCKS_PER_SEC,就可以換成"秒”,標準c函數(shù)。clock_tclock(void);#include<time.h>clock_tt=clock();longsec=t/CLOCKS_PER_SEC;他是記錄時鐘周期的,實現(xiàn)看來不會很精確,需要試驗驗證;據(jù)說tc2.0的time結構含有毫秒信息#include<stdio.h>#include<dos.h>intmain(void){structtimet;gettime(&t);printf("Thecurrenttimeis:%2d:%02d:%02d.%02d\n",t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);return0;}time是一個結構體,,其中成員函數(shù)ti_hund是豪秒。。。上程序可以在tc2.0運行這個是windows里面常用來計算程序運行時間的函數(shù);DWORDdwStart=GetTickCount();//這里運行你的程序代碼DWORDdwEnd=GetTickCount();則(dwEnd-dwStart)就是你的程序運行時間,以毫秒為單位這個函數(shù)只精確到55ms,1個tick就是55ms。timeGetTime()基本等于GetTickCount(),但是精度更高DWORDdwStart=timeGetTime();//這里運行你的程序代碼DWORDdwEnd=timeGetTime();則(dwEnd-dwStart)就是你的程序運行時間,以毫秒為單位雖然返回的值單位應該是ms,但傳說精度只有10ms。BorlandC++BuilderVCL的時間函數(shù)Date返回TDateTime對象,包含當前的年月日信息,函數(shù)原型如下:System::TDateTime__fastcallDate(void);Time返回TDateTime對象,包含當前的時間信息,函數(shù)原型如下:System::TDateTime__fastcallTime(void);Now返回TDateTime對象,獲取當前的日期和時間信息,函數(shù)原型如下:System::TDateTime__fastcallNow(void);DatetimeToString將TDateTime對象轉換為指定格式的字符串對象函數(shù)原型如下:void__fastcallDateTimeToString(AnsiString&;Result,constAnsiStringFormat,System::TDateTimeDateTime);DateToStr將TDateTime對象(包含當前年月日信息)轉換為字符串對象,函數(shù)原型如下:AnsiString__fastcallDateToStr(System:TDateTimeDate);TimeToStr將當前日期轉換為字符串對象函數(shù)原型如下:AnsiString__fastcallTimeToStr(System::TDateTimeTime);DateTimetoStr將TDateTime對象轉換為字符串對象,函數(shù)原型如下:AnsiString__fastcallDateTimeToStr(System::TDateTimeDateTime);StrToDate將字符串對象轉換為年月日對象函數(shù)原型如下:System::TDateTime__fastcallStrToDate(constAnsiStringS;StrToTime將字符串對象轉換時間對象函數(shù)原型如下:System::TDateTime__fastcallStrToTime(constAnsiStringS);10.StrToDateTime將字符串對象轉換為年月日時間對象函數(shù)原型如下:System::TDateTime__fastcallStrToDateTime(constAnsiStringS》11.DateTimeToSystemTime將TDateTime對象轉換為操作系統(tǒng)時間,函數(shù)原型如下:void__fastcallDateTimeToSystemTime(System::TDateTimeDateTime,_SYSTEMTIME&;SystemTime);12.SystemTimeToDateTime將操作系統(tǒng)時間轉換為TDateTime對象,函數(shù)原型如下:System::TDateTime__fastcallSystemTimeToDateTime(const_SYSTEMTIME&;SystemTime);下面是轉的一個用匯編的精確計時方法如何獲得程序或者一段代碼運行的時間?你可能說有專門的程序測試工具,確實,不過你也可以在程序中嵌入?yún)R編代碼來實現(xiàn)。在Pentium的指令系統(tǒng)中有一條指令可以獲得CPU內部64位計數(shù)器的值,我們可以通過代碼兩次獲取該計數(shù)器的值而獲得程序或代碼運行的時鐘周期數(shù),進而通過你的cpu的頻率算出一個時鐘周期的時間,從而算出程序運行的確切時間。我們通過指令TDSIC來獲得cpu內部計數(shù)器的值,指令TDSIC返回值放在EDX:EAX中,其中EDX中存放64位寄存器中高32位的值,EAX存放第32位的值.下面看看實現(xiàn)的代碼:〃用匯編實現(xiàn)獲取一段代碼運行的時間#include<iostream>usingnamespacestd;voidGetClockNumber(longhigh,longlow);voidGetRunTime();intmain(){longHighStart,LowStart,HighEnd,LowEnd;longnumhigh,numlow;//獲取代碼運行開始時cpu內部計數(shù)器的值__asm{RDTSCmovHighStart,edxmovLowStart,eax}for(inti=0;i<100000;i++){for(inti=0;i<100000;i++){}}//獲取代碼結束時cpu內部計數(shù)器的值,并減去初值__asm{RDTSCmovHighEnd,edxMovL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育部部長競選演講稿4篇
- 七夕節(jié)海報文案(50句)
- 報關實務-教學課件 第九章 海關企業(yè)管理
- 慢性腎炎的飲食禁忌
- 國際貿(mào)易單證樣式 第2部分:電子單證 征求意見稿
- 介紹京劇課件教學課件
- 幼兒文學課件教學課件
- 前廳服務課件教學課件
- 羊絨衫后加工合同(2篇)
- 綠化樹木移植合同(2篇)
- 《最優(yōu)化方法》教學大綱
- 第15課《誡子書》課件(共29張PPT) 部編版語文七年級上冊
- 大型設備說明-涂膠顯影機第1臺
- 壓力變送器的安裝與校驗演示教學課件
- 六年級上冊美術課件 8《參觀券的設計》 人美版
- 阿基米德原理 公開課一等獎課件
- 扁平魚骨圖模板課件
- 公司食堂人員工資及績效考核方案-
- 人教部編版語文五年級上冊第六單元:語文園地六教學課件
- A級招聘法(聘誰)解析課件
- 農(nóng)行流水模板
評論
0/150
提交評論