計時函式(一)

2022-03-01 14:50:32 字數 3082 閱讀 8532

歡迎討論

所謂「時」,可以分成時間點和時間段兩大類,時間點的概念就好比知道現在是幾時幾分,而時間段主要用於計量這段程式執行了多久,或者用於定時觸發中斷。c/c++中有多種方法可以實現計時。

需要包含標頭檔案或者是,time()的函式原型為:

time_t time ( time_t * timer );

其中time_t是64位的整型,用於計算自2023年1月1日以來逝去的秒數,既可以通過返回值來得到秒數,也可以通過傳入引數來獲得秒數,函式的使用方法如下:

1

intmain()

2

執行結果如下:

可以通過兩次時間點之差來獲得時間段。由time()得到的僅僅是乙個很大的秒數,怎樣才能將之轉換成我們日常生活中能用到的年、月、日、時、分和秒呢?

需要包含標頭檔案或者是,localtime()的函式原型如下:

struct tm * localtime ( const time_t * timer );

返回的是名為tm的結構體,而tm結構體中則儲存了諸如年、月、日之類的有意義的時間點,函式的用法如下:

1

intmain()

2

首先用time函式得到自元年以來逝去的秒數,接著由localtime(秒數)即可得到儲存有意義時間點的結構體,tm結構體中的tm_year表示自2023年以來逝去的年,所以要輸出現在是多少年,要記得加上1900;tm_mon表示當前月,注意這裡的取值範圍是[0, 11],所以對之+1則得到生活意義上的月;表示當前天的情況稍稍複雜一些,比如今年是2023年1月5日,常用的天是5,即今天是本月的第5天,用tm_mday表示,mday表示month day;也可以說今天是週六,即今天是本週的第6天,用tm_wday表示,wday表示week day;同樣也可以說今天是整個一年中的第5天,即今天是本年的第5天,用tm_yday表示,yday表示year day,注意1月1號的tm_yday是0,所以對之+1以更符合生活上的概念。下面的時、分、秒的概念也就相對容易了,用tm_hour表示時,tm_min表示分,tm_sec表示秒。

上面程式的執行結果如下:

下面我們列個表總結一下:

tm_year            當前年(自2023年以來逝去的年數,一般對之+1900)

tm_mon            當前月(注意起始是0,所以一般對之+1)

tm_mday          當前日

tm_wday          星期幾

tm_yday           年中的第幾天(注意起始是0,所以一般對之+1)

tm_hour           當前時

tm_min             當前分

tm_sec             當前秒

如果你用的是visual studio的編譯器,那麼直接使用localtime()函式,編譯器會給出warning,說這個函式不安全,並推薦使用localtime_s()。localtime_s()的函式介面如下:

errno_t localtime_s(

struct tm* _tm,

const time_t *time

我看了一下微軟的文件,貌似這個函式對原來函式的「安全」改進就在於用返回值判斷函式執行是否成功。所以很簡單地,我們只要把上述程式傳入的引數形式修改一下:

1

intmain()2;

5int err = localtime_s(¤ttime, &t);6if

(err)

711 cout << "

當前年:

"<< 1900 + currenttime.tm_year <

12<< "

當前月:

"<< currenttime.tm_mon + 1

<

13<< "

當前日:

"<< currenttime.tm_mday <

14<< "

當前時:

"<< currenttime.tm_hour <

15<< "

當前分:

"<< currenttime.tm_min <

16<< "

當前秒:

"<< currenttime.tm_sec <

17 cout << "

今天是星期

"<< currenttime.tm_wday <

18<< "

今天是年中的第

"<< currenttime.tm_yday + 1

<< "天"

<

19 }

tm結構體中能表示的最小單位是「秒」,在有些實時應用時,可能需要更精確的度量,該怎麼辦呢?

windows.h標頭檔案中的getlocaltime()函式可以精確到毫秒,函式介面如下:

void getlocaltime(systemtime* systemtime);

systemtime是類似於tm的結構體,使用方法很簡單,如下面的程式所示,

1

intmain()

2

執行結果如下:

可以看到,systemtime結構體中的成員都是生活意義上的,不用+1或者+1900來修正,其實看變數名也已經知道它的含義了,但在這裡還是不妨做個表:

wyear                  當前年

wmonth               當前月

wday                   當前日

whour                 當前時

wminute               當前分

wsecond              當前秒

wmilliseconds     當前毫秒

wdayofweek      當前是星期幾

python計時函式 python計時函式

技術文件 一屏 使用者滑動螢幕至主體內容展現結束之前,在頁面任意位置停留時看到的所有內容,稱為一屏。移動端適配 為了使pc頁面能夠在移動端正常展現的手段,保證使用者不需要縮小 放大 左右滑動即可看清全部字型。廣告 指為了某種特定的需要,通過一定形式的 公開且廣泛地向公眾傳遞資訊的宣傳手段 本 中的廣...

opencv 計時函式

opencv進行計時需要用到兩個函式 gettickcount 和 gettickfrequency gettickcount 表示計算機從某一時間開始的計數個數 gettickfrequency 表示單位時間內計算機的計數個數 為了得到執行某一過程所需的時間,可以使用下面的 double t do...

計時函式 opencv c

1.opencv core.hpp gettickcount 和gettickfrequency double time0 static cast cv gettickcount 你需要計算的 部分 time0 static cast cv gettickcount time0 cv gettick...