Cpu
C-std 標頭檔包含系統、使用者和核心時間的幫助函式?
基本上,我正在使用 Nvidia 的新 github 儲存庫並嘗試在跨平台設置中編譯它們。具體來說,我正在嘗試在 Fedora 33 上編譯它們。
我遇到了一個問題:
In file included from /home/chris/.../sample_example.cpp:55: /home/chris/.../nvml_monitor.hpp:19:10: fatal error: cfgmgr32.h: No such file or directory 19 | #include <cfgmgr32.h> | ^~~~~~~~~~~
這
cfgmgr32.h
似乎是一個特定於 Windows 的庫。在文件
nvml_monitor.hpp
中,看起來我可以禁用大部分 Windows 內容。但是,我認為以下特定於 Windows 的功能會很有用:float getCpuLoad() { static uint64_t _previousTotalTicks = 0; static uint64_t _previousIdleTicks = 0; FILETIME idleTime, kernelTime, userTime; GetSystemTimes(&idleTime, &kernelTime, &userTime); auto FileTimeToInt64 = [](const FILETIME& ft) { return (((uint64_t)(ft.dwHighDateTime)) << 32) | ((uint64_t)ft.dwLowDateTime); }; auto totalTicks = FileTimeToInt64(kernelTime) + FileTimeToInt64(userTime); auto idleTicks = FileTimeToInt64(idleTime); uint64_t totalTicksSinceLastTime = totalTicks - _previousTotalTicks; uint64_t idleTicksSinceLastTime = idleTicks - _previousIdleTicks; float result = 1.0f - ((totalTicksSinceLastTime > 0) ? ((float)idleTicksSinceLastTime) / totalTicksSinceLastTime : 0); _previousTotalTicks = totalTicks; _previousIdleTicks = idleTicks; return result * 100.f; }
我正在尋找的不是任何人來“做這項工作”或任何東西——只是一個開始的地方或一個可以繼續前進的線索。
在此問題空間中搜尋 linux 解決方案時,結果會被 shell 級響應混淆。但是,相反,我正在尋找的是
C
為這些資訊提供介面和句柄的標頭。是否有任何特定的 Linux 標頭與
cfgmgr32.h
Windows 中的標頭類似?如果沒有,是否有可搜尋的 linux 核心資源來發現這些標頭或功能?
在 Linux 中,這些資訊在
/proc/stat
’cpu
行中可用,並且通常從那裡解析——我認為沒有使用者空間可訪問的函式可以提供相同的資訊。該行中的值給出了使用者模式所花費的時間、低優先級使用者模式所花費的時間、系統模式所花費的時間、空閒任務所花費的時間等等;有關詳細資訊,請參閱上面的連結。
函式可用於檢索目前程序和/或其子程序的時間資訊;例如POSIX
getrusage
和times
.