1.如果在基于 Windows Win32 的程序(纯C++无法使用),即可以使用 GetTickCount() 函数实现。 精确到毫秒(ms)级。
DWORD dwStart = GetTickCount(); // 程序....... DWORD dwEnd = GetTickCount(); DWORD dwTimeUsed = dwEnd - dwStart;
2. 使用 time 结构体获取时间,在纯 C++ 下可用,精确到秒(s)。
#include<stdio.h> #include<time.h> #include<conio.h> int main() { time_t stime , etime ; time( &stime ); // get start time getch(); // Access time( &etime ); // get end time printf( "%ld/n" , etime - stime ); getch(); return 0; }
3. 使用CTimer类获取。(没有试用过)
class CTimer { public: CTimer() {QueryPerformanceFrequency(&m_Frequency); Start();} void Start() {QueryPerformanceCounter(&m_StartCount);} double End() {LARGE_INTEGER CurrentCount;QueryPerformanceCounter(&CurrentCount); return double(CurrentCount.LowPart - m_StartCount.LowPart) / (double)m_Frequency.LowPart;} private: LARGE_INTEGER m_Frequency; LARGE_INTEGER m_StartCount; };
4. 利用VC自带的编译工具,直接用 profile 就显示出。在 VC 的链接属性页勾选profile项,然后profile(在编译菜单下),各个函数时间都出来了来。
5. 使用Clock函数生成,直接在C++里使用。精度为 0.000001秒。
#include <iostream> #include <ctime> using namespace std; int max(int x,int y) { return (x>y)?x:y; } int main() { const double begin = (double)clock()/CLK_TCK; for(int i = 10000; i > 0; i--) for(int j = 10000; j > 0; j--) max(i, j); const double end = (double)clock()/CLK_TCK; cout <<begin<<" "<<end; return 0; }
6. 最精确的方法,C++可直接调用,精确到 ms。
#include <ctime> //计时用的头文件 #include <iostream> using namespace std; int main() { time_t start,end,time; start=clock(); for(int i=0;i<=100000;i++) cout << i << ' '; cout << endl; end=clock(); time=end-start;//这里的时间是计算机内部时间 cout << endl << ""time:" << time << endl; system("pause"); return 0; }