2012-02-13 133 views
1

我想知道在非託管C++代碼中是否可以這樣做?用C++獲取系統硬盤使用情況

我正在編寫一個程序,顯示系統當前的CPU使用情況,但我觀察到在某些較新的桌面上正在進行某些冗長的硬盤操作時(比如從後臺備份進程中)CPU使用率保持非常低(不到10%),但系統使用起來有點慢。所以我想在系統範圍內添加我的程序當前的HDD使用情況,我只是不確定使用哪種API。

+0

有性能計數器覆蓋每秒的I/O請求的數量,我認爲可能有一個平均請求隊列深度。那是你在找什麼? – 2012-02-13 03:57:18

+0

這可能就是它(提供的I/O請求是HDD使用意味着什麼 - 我只是不確定確切的術語。) – ahmd0 2012-02-13 04:04:21

+1

自從任務管理器顯示它之後,應該有這樣的功能。只是I/O請求不會這樣做,但是如果您可以訪問原始(不是文件請求,但阻止請求)I/O請求將會起作用。你真正想測量的是數據速度。然後你的用法是current_speed/max_speed。 – 2012-02-13 04:22:57

回答

1

您正在尋找「%磁盤時間」性能計數器。這表示磁盤正忙於爲請求提供服務的時間(平均)。如果它接近100%,那麼CPU可能會等待很多I/O的完成。

另一個選項是「當前磁盤隊列長度」。這表明有多少請求正在等待處理,這反過來又是衡量超額運作(發出的操作 - 已完成的操作)。如果隊列中的掛起操作爲零,則CPU不在等待磁盤;如果有噸,那麼CPU無關。

當然,如果有低優先級的CPU cound線程,那麼這些線程仍然會運行,而優先級較高的線程正在等待I/O。 Windows不會因爲磁盤繁忙而浪費CPU時間。