デフォルトでは、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ソリューションを検索すると、結果はシェルレベルの応答によって混乱します。しかし、代わりに私が探しているのは、C
この情報を提供するインターフェースとハンドルのヘッダーです。
cfgmgr32.h
Windowsのヘッダーと同様の目的を提供する特定のLinuxヘッダーはありますか?それ以外の場合、これらのヘッダーや機能を検索できる検索可能なLinuxカーネルリソースはありますか?
答え1
Linuxでは、この情報は次の場所にあります。/proc/stat
cpu
ライン、通常はそこから解析されます。同じ情報を提供するユーザー空間アクセス機能がないと思います。
この行の値は、ユーザーモードで費やされた時間、低い優先順位のユーザーモードで費やされた時間、システムモードで費やされた時間、アイドル操作で費やされた時間などを提供します。詳しくは上記のリンクをご覧ください。
たとえば、関数を使用して、現在のプロセスおよび/またはそのサブプロセスのタイミング情報を取得できます。POSIXgetrusage
そしてtimes
。