On Friday, 7 May 2021 at 08:25:43 UTC, Andre Pany wrote:
Is there some equivalent function in Phobos to get the cpu time on linux?

I don't think so, but you can use `core.sys.posix.sys.resource: rusage`.

If you want to use it on Windows as well, this is a code snippet I wrote for that:
```D
/// Describes how much cpu time a process has been getting
struct CpuUsage {
/// Time that the process has executed in kernel mode in microseconds
        ulong kernelTimeUs;

/// Time that the process has executed in user mode in microseconds
        ulong userTimeUs;
}

bool getCpuUsage(out CpuUsage r) {
        version(Windows) {
                void* currentProcess = GetCurrentProcess();
                FILETIME creationTime; // time that process was created
                FILETIME exitTime; // undefined if process has not exited
                FILETIME kernelTime; // ru_stime
                FILETIME userTime; // ru_utime
if (GetProcessTimes(currentProcess, &creationTime, &exitTime, &kernelTime, &userTime) == 0) {
                        return false; // GetLastError();
                }
                ulong toMicroseconds(FILETIME ft)  {
return (ft.dwLowDateTime | cast(ulong) ft.dwHighDateTime << 32) / 10;
                }
                r.kernelTimeUs = toMicroseconds(kernelTime);
                r.userTimeUs = toMicroseconds(userTime);
        } else version(Posix) {
                rusage rusageStruct;
                if (getrusage(RUSAGE_SELF, &rusageStruct) == -1) {
                        return false; //errno
                }
                auto toMicroseconds(timeval t) {
                        return cast(ulong) t.tv_sec * 1_000_000 + t.tv_usec;
                }
                r.kernelTimeUs = toMicroseconds(rusageStruct.ru_stime);
                r.userTimeUs = toMicroseconds(rusageStruct.ru_utime);
        }
        return true;
}
```
On Windows you need to link to "Psapi.lib", e.g. with `pragma(lib, "Psapi.lib")` or `libs "Psapi.lib"` in dub.sdl.

Reply via email to