Программно Получите использование процессора процесса в % на macOSC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Программно Получите использование процессора процесса в % на macOS

Сообщение Anonymous »

Мне нужно получить % ЦП, который в настоящее время используется в моем процессе на macOS. Я ожидаю, что он будет рассчитан таким образом, и он работает в Windows: < /p>

Код: Выделить всё

(currentAppTime - lastTrackedAppTime) * 100% / (currentSysTime - lastTrackedSysTime)
Последние и текущие метрики собираются после интервала времени. Br />

Код: Выделить всё

mach_msg_type_number_t count = HOST_CPU_LOAD_INFO_COUNT;
host_statistics(mach_host_self(), HOST_CPU_LOAD_INFO, (host_info_t)&cpuinfo, &count);
lastTrackedSysTime = std::accumulate(cpuinfo.cpu_ticks, cpuinfo.cpu_ticks + count, 0ULL);
время процесса:

Код: Выделить всё

struct proc_taskinfo taskInfo;
proc_pidinfo(getpid(), PROC_PIDTASKINFO, 0, &taskInfo, sizeof(taskInfo));
lastTrackedAppTime = taskInfo.pti_total_user + taskInfo.pti_total_system;
в моем коде:

Код: Выделить всё

static uint64_t lastTrackedAppTime; // already initialized in ctor
static uint64_t lastTrackedSysTime; // already initialized in ctor

void AppMetrics::getCPU() // called every 5 seconds
{
host_cpu_load_info_data_t cpuinfo;
mach_msg_type_number_t count = HOST_CPU_LOAD_INFO_COUNT;
auto hs = host_statistics(mach_host_self(), HOST_CPU_LOAD_INFO, (host_info_t)&cpuinfo, &count);
assert(hs == KERN_SUCCESS);

uint64_t currentSysTime = std::accumulate(cpuinfo.cpu_ticks, cpuinfo.cpu_ticks + count, 0ULL);
uint64_t totalSysDiff = currentSysTime - lastTrackedSysTime;

struct proc_taskinfo taskInfo;
auto ppi = proc_pidinfo(getpid(), PROC_PIDTASKINFO, 0, &taskInfo, sizeof(taskInfo));
assert(ppi == sizeof(taskInfo));

uint64_t currentAppTime = taskInfo.pti_total_user + taskInfo.pti_total_system;
uint64_t totalAppDiff = currentAppTime - lastTrackedAppTime;
metrics.appCPU = totalAppDiff * 100.0 / totalSysDiff; // the value I need

lastTrackedSysTime = currentSysTime;
lastTrackedAppTime = currentAppTime;
}
Проблема заключается в том, что TotalAppdiff намного больше, чем TotalSySdiff .
lastTrackedSysTime: 4555257262
currentSysTime: 4555261249
totalSysDiff: 3987

lastTrackedAppTime: 435637867
currentAppTime: 441909402
totalAppDiff: 6271535
< /code>
Как это возможно? Что я делаю не так? Я вообще придерживаюсь правильного подхода?

Подробнее здесь: https://stackoverflow.com/questions/794 ... n-on-macos
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»