获取当前的pthread cpu使用情况Mac OS X

问题描述 投票:3回答:1

如何从Mac OS X中的线程本身获取线程的cpu时间?对于linux,我要做的是getrusage(RUSAGE_THREAD, &ru),但该解决方案不适用于Mac OS X。

[我遇到了这个question,但我不知道如何针对我的目的进行调整(我不熟悉Mac OS X的内部结构。我什至不确定pthread线程==马赫线程)。

c macos pthreads cpu-usage
1个回答
6
投票

这就是我最终得到的:

#include <mach/mach_init.h>
#include <mach/thread_act.h>
#include <mach/mach_port.h>

[...]

mach_port_t thread;
kern_return_t kr;
mach_msg_type_number_t count;
thread_basic_info_data_t info;

thread = mach_thread_self();

count = THREAD_BASIC_INFO_COUNT;
kr = thread_info(thread, THREAD_BASIC_INFO, (thread_info_t) &info, &count);

if (kr == KERN_SUCCESS && (info.flags & TH_FLAGS_IDLE) == 0) {
    usage->utime.tv_sec  = info.user_time.seconds;
    usage->utime.tv_usec = info.user_time.microseconds;
    usage->stime.tv_sec  = info.system_time.seconds;
    usage->stime.tv_usec = info.system_time.microseconds;
}
else {
    // should not happen
    printf("Could not retreive thread info.");
    bzero(usage, sizeof(struct usage));
}

mach_port_deallocate(mach_task_self(), thread);

我得到的结果与Linux下getrusage(RUSAGE_THREAD, &ru)的结果截然不同。所以我不确定这是正确的方法。

© www.soinside.com 2019 - 2024. All rights reserved.