如何从 Mac OS X 中的线程本身获取线程的 cpu 时间?对于 linux,我所做的是,getrusage(RUSAGE_THREAD, &ru)
但此解决方案不适用于 Mac OS X。
我遇到了这个问题,但我不知道如何根据我的目的调整它(我不熟悉 Mac OS X 的内部结构。我什至不确定 pthread thread == mach thread)。
这就是我最终的结果:
#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);
我得到的结果与getrusage(RUSAGE_THREAD, &ru)
在 Linux 下得到的结果截然不同。所以我不确定这是正确的方法。