linux 改成utc时间_C++下四种常用的程序运行时间的计时方法总结
記錄下當前時間start,調用程序fun(),再記錄一下時間end。
前后時間一減(start-end)就得到程序的運行時間了。
首先介紹最常用的,但兩種精度不是很高(>=10ms)的方法:clock()和GetTickCount()
一、clock()
C系統調用方法,所需頭文件ctime/time.h,即windows和linux都可以使用。
1、clock()返回類型為clock_t類型
2、clock_t實際為long 類型, typedef long clock_t
3、clock() 函數,返回從 開啟這個程序進程 到 程序中調用clock()函數 時之間的CPU時鐘計時單元(clock tick)數(掛鐘時間),返回單位是毫秒
4、可以用常量CLOCKS_PER_SEC, 這個常量表示每一秒(per second)有多少個時鐘計時單元
#include <time.h> //引入頭文件 int main() { clock_t start,end; //定義clock_t變量 start = clock(); //開始時間fun() //需計時的函數end = clock(); //結束時間 cout<<"time = "<<double(end-start)/CLOCKS_PER_SEC<<"s"<<endl; //輸出時間(單位:s) }二、GetTickCount()
GetTickCount()是一個Windows API,所需頭文件為<windows.h>。
返回從操作系統啟動到現在所經過的毫秒數(ms),精確度有限,跟CPU有關,一般精確度在16ms左右,最精確也不會精確過10ms。它的返回值是DWORD,當統計的毫妙數過大時,將會使結果歸0,影響統計結果.
#include <windows.h> //引入頭文件 int main() {DWORD t1,t2;t1 = GetTickCount();fun() //需計時的函數t2 = GetTickCount();cout<<"time = "<<((t2-t1)*1.0/1000)<<endl; //輸出時間(單位:s) }接下來是兩種高精度的計時方法:gettimeofday() 和 QueryPerformanceCounter()
三、QueryPerformanceCounter()
QueryPerformanceCounter()是一個Windows API,所需頭文件為<windows.h>
這個函數返回高精確度性能計數器的值,它可以以微妙為單位計時.但是QueryPerformanceCounter() 確切的精確計時的最小單位是與系統有關的,
所以,必須要查詢系統以得到QueryPerformanceCounter()返回的嘀噠聲的頻率. QueryPerformanceFrequency() 提供了這個頻率值,返回每秒嘀噠聲的個數.
#include <windows.h> //引入頭文件 int main() {LARGE_INTEGER t1,t2,tc;QueryPerformanceFrequency(&tc);QueryPerformanceCounter(&t1);fun() //需計時的函數QueryPerformanceCounter(&t2);time=(double)(t2.QuadPart-t1.QuadPart)/(double)tc.QuadPart; cout<<"time = "<<time<<endl; //輸出時間(單位:s) }四、gettimeofday()
gettimeofday() linux環境下的計時函數,int gettimeofday ( struct timeval * tv , struct timezone * tz ),gettimeofday()會把目前的時間由tv所指的結構返回,當地時區的信息則放到tz所指的結構中.
//timeval結構定義為: struct timeval{ long tv_sec; /*秒*/ long tv_usec; /*微秒*/ }; //timezone 結構定義為: struct timezone{ int tz_minuteswest; /*和Greenwich 時間差了多少分鐘*/ int tz_dsttime; /*日光節約時間的狀態*/ };這個函數獲取從1970年1月1日到現在經過的時間和時區(UTC時間),(按照linux的官方文檔,時區已經不再使用,正常應該傳NULL)。
調用代碼:
#include <sys/time.h> //引入頭文件 int main() {struct timeval t1,t2;double timeuse;gettimeofday(&t1,NULL);fun();gettimeofday(&t2,NULL);timeuse = (t2.tv_sec - t1.tv_sec) + (double)(t2.tv_usec - t1.tv_usec)/1000000.0;cout<<"time = "<<timeuse<<endl; //輸出時間(單位:s) }還有一種C系統調用方法--time(),但是精度很低(秒級),不建議使用,這里就稍微帶下用法。
time_t start,stop;start = time(NULL);fun();stop = time(NULL);附帶三種計算Python的代碼塊或程序的運行時間的方法
方法一
import datetime start = datetime.datetime.now() run_function():# do something end = datetime.datetime.now() print (end-start方法二
import time start = time.time() run_function() end = time.time() print str(end)方法三
import time start = time.clock() run_function() end = time.clock() print str(end-start)其中,方法二的精度比較高。方法一基本上是性能最差的。這個其實是和系統有關系的。一般我們推薦使用方法二和方法三。我的系統是Ubuntu,也就是Linux系統,方法二返回的是UTC時間。 在很多系統中time.time()的精度都是非常低的,包括windows。
總概來講,在 Unix 系統中,建議使用 time.time(),在 Windows 系統中,建議使用 time.clock()。
總結
以上是生活随笔為你收集整理的linux 改成utc时间_C++下四种常用的程序运行时间的计时方法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react 组件传值
- 下一篇: Linux下多功能编辑器,Linux下的