C++獲得毫秒級的時間差(支援Windows 和 Linux)
阿新 • • 發佈:2018-11-17
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; }