【轉】c++ 獲取程序運行時間


轉自:http://blog.csdn.net/ghevinn/article/details/22800059


DWORD start_time=GetTickCount();
{...}

DWORD end_time=GetTickCount();

DWORD Subtime = (end_time-start_time);

int k = 0;



如何獲取代碼運行時間
在調試中,經常需要計算某一段代碼的執行時間,下面給出兩種常用的方式:

第一種:使用GetTickCount函數

#include<iostream>
#include<windows.h>

int main()
{
DWORD start_time=GetTickCount();
{
//此處為被測試代碼
}
DWORD end_time=GetTickCount();
cout<<"The run time is:"<<(end_time-start_time)<<"ms!"<<endl;//輸出運行時間
return 0;
} GetTickCount函數返回從系統運行到現在所經歷的時間(類型為DWORD),單位為ms,因為DWORD表示范圍的限制,所以使用此種方法存在限制,即系統的運行時間的ms表示不能超出

DWORD的表示范圍。

第二種:使用clock()函數
#include<iostream>
#include<time.h>

int main()
{
clock_t start_time=clock();

{
//被測試代碼
}

clock_t end_time=clock();
cout<< "Running time is: "<<static_cast<double>(end_time-start_time)/CLOCKS_PER_SEC*1000<<"ms"<<endl;//輸出運行時間
return 0;
} clock_t,clock()定義於time.h中,clock()返回從程序運行時刻開始的時鍾周期數,類型為long.CLOCKS_PER_SEC定義了每秒鍾包含多少了時鍾單元數,因為計算ms,所以

*1000。

由上面分析可知,用clock()函數計算運行時間,表示范圍一定大於GetTickCount()函數,所以,建議使用clock()函數。


===========================================================================================================


1.使用CTime類
CString str;
//獲取系統時間
CTime tm;
tm=CTime::GetCurrentTime();
str=tm.Format("現在時間是%Y年%m月%d日 %X");
MessageBox(str,NULL,MB_OK);
2: 得到系統時間日期(使用GetLocalTime)

SYSTEMTIME st;
CString strDate,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);
3.使用GetTickCount
//獲取程序運行時間
long t1=GetTickCount();//程序段開始前取得系統運行時間(ms)
Sleep(500);
long t2=GetTickCount();();//程序段結束后取得系統運行時間(ms)
str.Format("time:%dms",t2-t1);//前后之差即 程序運行時間
AfxMessageBox(str);
//獲取系統運行時間
long t=GetTickCount();
CString str,str1;
str1.Format("系統已運行 %d時",t/3600000);
str=str1;
t%=3600000;
str1.Format("%d分",t/60000);
str+=str1;
t%=60000;
str1.Format("%d秒",t/1000);
str+=str1;
AfxMessageBox(str);

如何在VC6.0中得到一個程序的運行時間,也就是這個程序耗費的時鍾周期數// C和C++的時間編程
#include<iostream>
#include<ctime>
using namespace std;
int main()
{
time_t begin,end;
begin=clock();
//這里加上你的代碼
end=clock();
cout<<"runtime: "<<double(end-begin)/CLOCKS_PER_SEC<<endl;
}

unix時間相關,也是標准庫的
這些在<time.h>
1.timegm函數只是將struct tm結構轉成time_t結構,不使用時區信息;
time_t timegm(struct tm *tm);
2.mktime使用時區信息
time_t mktime(struct tm *tm);
timelocal 函數是GNU擴展的與posix函數mktime相當
time_t timelocal (struct tm *tm);
3.gmtime函數只是將time_t結構轉成struct tm結構,不使用時區信息;
struct tm * gmtime(const time_t *clock);
4.localtime使用時區信息
struct tm * localtime(const time_t *clock);
1.time獲取時間,stime設置時間
time_t t;
t = time(&t);
2.stime其參數應該是GMT時間,根據本地時區設置為本地時間;
int stime(time_t *tp)
3.UTC=true 表示采用夏時制;
4.文件的修改時間等信息全部采用GMT時間存放,不同的系統在得到修改時間后通過localtime轉換成本地時間;
5.設置時區推薦使用setup來設置;
6.設置時區也可以先更變/etc/sysconfig/clock中的設置 再將ln -fs /usr/share/zoneinfo/xxxx/xxx /etc/localtime 才能重效
time_t只能表示68年的范圍,即mktime只能返回1970-2038這一段范圍的time_t
看看你的系統是否有time_t64,它能表示更大的時間范圍

Window里面的一些不一樣的
CTime MFC類,好像就是把time.h封了個類,沒擴展
CTime t = GetCurrentTime();
SYSTEMTIME 結構包含毫秒信息
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
SYSTEMTIME t1;
GetSystemTime(&t1)
CTime curTime(t1);
WORD ms = t1.wMilliseconds;
SYSTEMTIME sysTm;
::GetLocalTime(&sysTm);

在time.h中的_strtime() //只能在windows中用
char t[11];
_strtime(t);
puts(t);
------------------------------------------------------------------------------
_timeb定義在SYS\TIMEB.H,有四個fields
dstflag
millitm
time
timezone
void _ftime( struct _timeb *timeptr );
struct _timeb timebuffer;
_ftime( &timebuffer );
取當前時間:文檔講可以到ms,有人測試,好象只能到16ms!

-------------------------------------------------------------------------
如何設定當前系統時間---windows
SYSTEMTIME m_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 !");
else
MessageBox("Error !");

SYSTEMTIME m_myLocalTime,*lpSystemTime;
m_myLocalTime.wYear=2003;
m_myLocalTime.wMonth=1;
m_myLocalTime.wDay=1;
lpSystemTime=&m_myLocalTime;
if( SetDate(lpSystemTime) ) //此處換成 SetSystemTime( )也不行
MessageBox("OK !");
else
MessageBox("Error !");

-----------------------------------------------------------------------------
用clock()函數,得到系統啟動以后的毫秒級時間,然后除以CLOCKS_PER_SEC,就可以換成“秒”,標准c函數。
clock_t clock ( void );
#include <time.h>
clock_t t = clock();
long sec = t / CLOCKS_PER_SEC;
他是記錄時鍾周期的,實現看來不會很精確,需要試驗驗證;
---------------------------------------------------------------------------
據說tc2.0的time結構含有毫秒信息
#include <stdio.h>
#include <dos.h>
int main(void)
{
struct time t;
gettime(&t);
printf("The current time is: %2d:%02d:%02d.%02d\n",
t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);
return 0;
}
time 是一個結構體,, 其中成員函數 ti_hund 是豪秒。。。上程序可以在tc2.0運行
--------------------------------------------------------------------------------
這個是windows里面常用來計算程序運行時間的函數;
DWORD dwStart = GetTickCount();
//這里運行你的程序代碼
DWORD dwEnd = GetTickCount();
則(dwEnd-dwStart)就是你的程序運行時間, 以毫秒為單位
這個函數只精確到55ms,1個tick就是55ms。

--------------------------------------------------------------------------------
timeGetTime()基本等於GetTickCount(),但是精度更高
DWORD dwStart = timeGetTime();
//這里運行你的程序代碼
DWORD dwEnd = timeGetTime();
則(dwEnd-dwStart)就是你的程序運行時間, 以毫秒為單位
雖然返回的值單位應該是ms,但傳說精度只有10ms。
--------------------------------------------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM