常見當前執行緒 程序 系統效能的API

2021-08-11 09:37:05 字數 1996 閱讀 7415

標頭檔案 #include

1. sleep() 函式

c++中的延遲函式,能夠讓當前的執行緒停下來。引數是毫秒

2. gettickcount() 函式

函式原型為dword gettickcount(void);  

返回從作業系統啟動到現在所經過的毫秒數。

由於返回型別為dword,所以經過足夠長的時間,返回值一定會溢位,從而又回到零。

我們知道dword在標頭檔案windef.h中定義如下:

typedef unsigned long dword; 即四位元組無符號整數,能表示的最大值為2^32-1 = 4,294,967,295,一天有24*60*60*1000 = 86,400,000毫秒,4,294,967,295 / 86,400,000 = 49.71,因此若作業系統連續執行49.71天,這個數字會回到0。

3. timegetsystemtime() 函式

使用mmtime結構返回系統時間。該函式的操作

方式與timegettime()

函式相同.該函式就是再timegettime上面封裝了一層,其還是呼叫timegettime實現的。該函式比timegettime需要更多的時間開銷。

4. waitforsingleobject() 函式

停下來,等待某個事件發生。

5. performancecounter

效能計數器。

6. getcputickcount() 函式

使用rdtsc指令獲取當前cpu核心執行週期數。

7. getprocessorinfo() 函式

獲取當前系統的一些資訊,是windows server上的api。獲取機器中的處理器個數,也可以用getsysteminfo()。和setthreadaffinitymask()函式結合使用,能更好的控制處理器。

8. setthreadaffinitymask() 函式

設定執行緒在多核cpu的哪個核上執行

函式原型為:

dword _ptr winapi setthreadaffinitymask(

__in  handle hthread,

__in  dword_ptr dwthreadaffinitymask

);

9.queryperformancefrequency

() 函式

獲取定時器的頻率。

原型:bool queryperformancefrequency(large_integer *lpfrequency);

返回值:非0,硬體支援高精度計數器; 為0,硬體不支援,讀取失敗

資料型別large_integer既可以是乙個作為8位元組長的整數,也可以是作為兩個4位元組長的整數的聯合結構,其具體用法根據編譯器是否支援64位而定。該型別的定義如下:

typeef union _large_integer;

longlong quadpart;

} large_integer;

10. queryperformancecounter() 函式

查詢效能計數器,能夠精確的計時。如果硬體有定時器,它會啟動這個定時器,且不斷獲取定時器的值,這時的定時器精度和硬體時鐘的晶振一樣精確。函式原型為:

bool queryperformancecounter(

large_integer *lpperformancecount  // address of current counter value   當前計數器值的位址 

); queryperformancecounter() 和queryperformancefrequency

() 這兩個函式配合,計算出事件的精確時間。

舉個例子,計算sleep(1000)的精確時間,**如下:

#include #include void main()

執行兩次,輸出結果分別為1.000548、1.000087。所以sleep()的精度還是不夠高。

幫助了解當前執行緒 程序 系統效能的API

1.sleep 這個方法能讓當前執行緒 停 下來。2.waitforsingleobject 自己停下來,等待某個事件發生。3.gettickcount 有人把tick翻譯成 滴答 很形象。4.queryperformancefrequency queryperformancecounter 讓你訪...

std thread中獲取當前執行緒的系統id

std thread不提供獲取當前執行緒的系統id的方法,僅可以獲取當前的執行緒id,但是我們可以通過建立索引表的方式來實現 1 std mutex m 2 std mapthreads 3void48 void wrap void f 9 而後用其建立執行緒 1 std thread t1 wra...

Windows Linux下獲取當前執行緒的ID號

序 在多執行緒場合,為了方便跟蹤執行緒的執行狀態,往往需要在程式中新增列印當前執行緒id號的功能。1.linux下列印當前執行緒idpthread t pthread self 2.windows下列印當前執行緒iddword getcurrentthreadid ifdef win32 inclu...