Every process spend its time in kernel space as well as in user space. You can watch it by using perfmon.exe. Have a look at the screenshot.

But how to get the Kernel time and user time of a particular process?


You can use the api – GetProcessTimes(). See the code snippet below,

FILETIME CreationTime = { 0 };
FILETIME ExitTime     = { 0 };
FILETIME KernelTime   = { 0 };
FILETIME UserTime     = { 0 };

// Get Process times.
GetProcessTimes( GetCurrentProcess(),
                 &CreationTime,
                 &ExitTime,
                 &KernelTime,
                 &UserTime );

// Format time to readable form.
SYSTEMTIME SystemTime = { 0 };
FileTimeToSystemTime( &KernelTime, & SystemTime );

// Kernel Time in HH:MM:SS:mmm.
CString csKernelTime;
csKernelTime.Format( _T("Kernel Time - %02d:%02d:%02d:%04d"),
                     SystemTime.wHour,
                     SystemTime.wMinute,
                     SystemTime.wSecond,
                     SystemTime.wMilliseconds );

// Format user time to readable form.
FileTimeToSystemTime( &UserTime, & SystemTime );

// Kernel Time in HH:MM:SS:mmm.
CString csUserTime;
csUserTime.Format( _T("User Time - %02d:%02d:%02d:%04d"),
                   SystemTime.wHour,
                   SystemTime.wMinute,
                   SystemTime.wSecond,
                   SystemTime.wMilliseconds );


You can also get the process creation time and process exit time by using the same api.


Targeted Audience – Beginners.