3

Mac OS Xのスレッド自体からスレッドのCPU時間を取得するにはどうすればよいですか?Linuxの場合、私がしていることはですgetrusage(RUSAGE_THREAD, &ru)が、このソリューションはMacOSXでは利用できません。

この質問に出くわしましたが、自分の目的に合わせて調整する方法がわかりません(Mac OSXの内部に精通していません。pthreadthread==mach threadかどうかさえわかりません)。

4

1 に答える 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)ます。ですから、これが正しい方法かどうかはわかりません。

于 2012-12-15T21:13:55.423 に答える