1. 程式人生 > >C++獲得毫秒級的時間差(支援Windows 和 Linux)

C++獲得毫秒級的時間差(支援Windows 和 Linux)

fatal error: windows.h: No such file or directory
我這裡Windows 裡面引用了 #include <windows.h> ,使用下面的方法測量函式執行時間

#include <iostream>
#include <windows.h>
using namespace std;
void timeTest()
{
	for(int i =0;i<1000;i++)
		cout<<i<<endl; 
}

int main()
{
	long start_time = GetTickCount();
  	timeTest();
	long end_time = GetTickCount();
    cout << "Running Time:" << end_time - start_time << "ms" << endl;
}


程式碼遷移到Linux下報錯,找不到 windows.h。
於是選擇使用Linux下的另外一種測量函式執行時間的方法,使用 #include <time.h>標頭檔案,程式碼如下:

#include <iostream>
#include <time.h>
using namespace std;

void timeTest()
{
	for(int i =0;i<1000;i++)
		cout<<i<<endl; 
}

int main()
{
	clock_t start, ends;
	start = clock();
 	timeTest();
	ends = clock();
	cout << "Running Time: " << ends - start<<" ms" << endl;
}


以上兩個方法在Windows下也都是準確的,然而到了Linux伺服器下就不夠精確了,於是請看下面的方法:

最終準確的函式執行時間度量方法——推薦使用: 而且下面這種方法的效率要高很多–個人實測
C++的<time.h>標頭檔案中有time和clock可以用來計算時間,但是“#include < chrono >”中提供了更加精確的統計時間的方法。
下面的程式碼支援Windows 和 Linux,但是要求編譯器必須支援C++11

#include <iostream>
#include <chrono>
using namespace std;
using std::chrono::high_resolution_clock;
using std::chrono::milliseconds;

void timeTest()
{
	for(int i =0;i<1000;i++)
		cout<<i<<endl; 
}

int main()
{
    high_resolution_clock::time_point beginTime = high_resolution_clock::now();
    
  	timeTest();
  
    high_resolution_clock::time_point endTime = high_resolution_clock::now();
    milliseconds timeInterval = std::chrono::duration_cast<milliseconds>(endTime - beginTime);
    cout << "Running Time:" << timeInterval.count()  << "ms" << endl;
}

最終方法感謝原作者:TheOneGIS