c – CLOCK_THREAD_CPUTIME_ID在MacOSX上
发布时间:2020-12-16 07:04:57 所属栏目:百科 来源:网络整理
导读:我有一个函数,我正在从 Linux移植到MacOSX,它利用clock_gettime和CLOCK_THREAD_CPUTIME_ID来测量在进程上花费的时间. 我在互联网上发现这个代码会给我相当于CLOCK_REALTIME: #ifdef __MACH__ // OS X does not have clock_gettime,use clock_get_time clock
我有一个函数,我正在从
Linux移植到MacOSX,它利用clock_gettime和CLOCK_THREAD_CPUTIME_ID来测量在进程上花费的时间.
我在互联网上发现这个代码会给我相当于CLOCK_REALTIME: #ifdef __MACH__ // OS X does not have clock_gettime,use clock_get_time clock_serv_t cclock; mach_timespec_t ts; host_get_clock_service(mach_host_self(),CALENDAR_CLOCK,&cclock); clock_get_time(cclock,&ts); mach_port_deallocate(mach_task_self(),cclock); #else timespec ts; clock_gettime(CLOCK_REALTIME,ts); #endif 但我似乎无法找到一个简单的方法来获取clock_gettime(CLOCK_THREAD_CPUTIME_ID,ts); 解决方法
最近我将一些pcsx2项目移植到Darwin / OSX,我也需要类似于CLOCK_THREAD_CPUTIME_ID的东西.这就是我想出的:
#include <stdint.h> #include <mach/mach_init.h> #include <mach/thread_act.h> #include <mach/mach_port.h> typedef uint64_t u64; // gets the CPU time used by the current thread (both system and user),in // microseconds,returns 0 on failure static u64 getthreadtime(thread_port_t thread) { mach_msg_type_number_t count = THREAD_BASIC_INFO_COUNT; thread_basic_info_data_t info; int kr = thread_info(thread,THREAD_BASIC_INFO,(thread_info_t) &info,&count); if (kr != KERN_SUCCESS) { return 0; } // add system and user time return (u64) info.user_time.seconds * (u64) 1e6 + (u64) info.user_time.microseconds + (u64) info.system_time.seconds * (u64) 1e6 + (u64) info.system_time.microseconds; } // Returns the CPU time the calling thread has used (system + user) in // units of 100 nanoseconds. The weird units are to mirror the Windows // counterpart in WinThreads.cpp,which uses the GetThreadTimes() API. On // OSX/Darwin,this is only accurate up until 1ms (and possibly less),so // not very good. u64 Threading::GetThreadCpuTime() { thread_port_t thread = mach_thread_self(); u64 us = getthreadtime(thread); mach_port_deallocate(mach_task_self(),thread); return us * 10ULL; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |