日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ios android cpu占用率,iPhone-iOS-从应用程序获取CPU使用率

發(fā)布時(shí)間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios android cpu占用率,iPhone-iOS-从应用程序获取CPU使用率 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

iPhone-iOS-從應(yīng)用程序獲取CPU使用率

有誰(shuí)知道如何獲取應(yīng)用程序的CPU使用率? 絕對(duì)有可能,因?yàn)閼?yīng)用商店中有一些可以顯示它的應(yīng)用程序(活動(dòng)監(jiān)視器觸摸)。

3個(gè)解決方案

74 votes

更新。 這段代碼為我工作:

更新2。thread_list泄漏,因此添加了vm_deallocate

#import

#import

float cpu_usage()

{

kern_return_t kr;

task_info_data_t tinfo;

mach_msg_type_number_t task_info_count;

task_info_count = TASK_INFO_MAX;

kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count);

if (kr != KERN_SUCCESS) {

return -1;

}

task_basic_info_t basic_info;

thread_array_t thread_list;

mach_msg_type_number_t thread_count;

thread_info_data_t thinfo;

mach_msg_type_number_t thread_info_count;

thread_basic_info_t basic_info_th;

uint32_t stat_thread = 0; // Mach threads

basic_info = (task_basic_info_t)tinfo;

// get threads in the task

kr = task_threads(mach_task_self(), &thread_list, &thread_count);

if (kr != KERN_SUCCESS) {

return -1;

}

if (thread_count > 0)

stat_thread += thread_count;

long tot_sec = 0;

long tot_usec = 0;

float tot_cpu = 0;

int j;

for (j = 0; j < (int)thread_count; j++)

{

thread_info_count = THREAD_INFO_MAX;

kr = thread_info(thread_list[j], THREAD_BASIC_INFO,

(thread_info_t)thinfo, &thread_info_count);

if (kr != KERN_SUCCESS) {

return -1;

}

basic_info_th = (thread_basic_info_t)thinfo;

if (!(basic_info_th->flags & TH_FLAGS_IDLE)) {

tot_sec = tot_sec + basic_info_th->user_time.seconds + basic_info_th->system_time.seconds;

tot_usec = tot_usec + basic_info_th->user_time.microseconds + basic_info_th->system_time.microseconds;

tot_cpu = tot_cpu + basic_info_th->cpu_usage / (float)TH_USAGE_SCALE * 100.0;

}

} // for each thread

kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));

assert(kr == KERN_SUCCESS);

return tot_cpu;

}

ivanzoid answered 2020-07-09T18:06:54Z

8 votes

對(duì)于Swift 3:

fileprivate func cpuUsage() -> Double {

var kr: kern_return_t

var task_info_count: mach_msg_type_number_t

task_info_count = mach_msg_type_number_t(TASK_INFO_MAX)

var tinfo = [integer_t](repeating: 0, count: Int(task_info_count))

kr = task_info(mach_task_self_, task_flavor_t(TASK_BASIC_INFO), &tinfo, &task_info_count)

if kr != KERN_SUCCESS {

return -1

}

var thread_list: thread_act_array_t? = UnsafeMutablePointer(mutating: [thread_act_t]())

var thread_count: mach_msg_type_number_t = 0

defer {

if let thread_list = thread_list {

vm_deallocate(mach_task_self_, vm_address_t(UnsafePointer(thread_list).pointee), vm_size_t(thread_count))

}

}

kr = task_threads(mach_task_self_, &thread_list, &thread_count)

if kr != KERN_SUCCESS {

return -1

}

var tot_cpu: Double = 0

if let thread_list = thread_list {

for j in 0 ..< Int(thread_count) {

var thread_info_count = mach_msg_type_number_t(THREAD_INFO_MAX)

var thinfo = [integer_t](repeating: 0, count: Int(thread_info_count))

kr = thread_info(thread_list[j], thread_flavor_t(THREAD_BASIC_INFO),

&thinfo, &thread_info_count)

if kr != KERN_SUCCESS {

return -1

}

let threadBasicInfo = convertThreadInfoToThreadBasicInfo(thinfo)

if threadBasicInfo.flags != TH_FLAGS_IDLE {

tot_cpu += (Double(threadBasicInfo.cpu_usage) / Double(TH_USAGE_SCALE)) * 100.0

}

} // for each thread

}

return tot_cpu

}

fileprivate func convertThreadInfoToThreadBasicInfo(_ threadInfo: [integer_t]) -> thread_basic_info {

var result = thread_basic_info()

result.user_time = time_value_t(seconds: threadInfo[0], microseconds: threadInfo[1])

result.system_time = time_value_t(seconds: threadInfo[2], microseconds: threadInfo[3])

result.cpu_usage = threadInfo[4]

result.policy = threadInfo[5]

result.run_state = threadInfo[6]

result.flags = threadInfo[7]

result.suspend_count = threadInfo[8]

result.sleep_time = threadInfo[9]

return result

}

Lionking answered 2020-07-09T18:07:14Z

0 votes

試試這個(gè):

- (NSString *)cpuUsage

{

kern_return_t kr;

task_info_data_t tinfo;

mach_msg_type_number_t task_info_count;

task_info_count = TASK_INFO_MAX;

kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count);

if (kr != KERN_SUCCESS)

{

return @"NA";

}

task_basic_info_t basic_info;

thread_array_t thread_list;

mach_msg_type_number_t thread_count;

thread_info_data_t thinfo;

mach_msg_type_number_t thread_info_count;

thread_basic_info_t basic_info_th;

uint32_t stat_thread = 0; // Mach threads

basic_info = (task_basic_info_t)tinfo;

// get threads in the task

kr = task_threads(mach_task_self(), &thread_list, &thread_count);

if (kr != KERN_SUCCESS)

{

return @"NA";

}

if (thread_count > 0)

stat_thread += thread_count;

long tot_idle = 0;

long tot_user = 0;

long tot_kernel = 0;

int j;

for (j = 0; j < thread_count; j++)

{

thread_info_count = THREAD_INFO_MAX;

kr = thread_info(thread_list[j], THREAD_BASIC_INFO,

(thread_info_t)thinfo, &thread_info_count);

if (kr != KERN_SUCCESS)

{

return nil;

}

basic_info_th = (thread_basic_info_t)thinfo;

if (basic_info_th->flags & TH_FLAGS_IDLE)

{

//This is idle

tot_idle = tot_idle + basic_info_th->user_time.microseconds + basic_info_th->system_time.microseconds;

} else {

//This is user

tot_user = tot_user + basic_info_th->user_time.microseconds;

//This is kernel

tot_kernel = tot_kernel + basic_info_th->system_time.microseconds;

}

} // for each thread

kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));

assert(kr == KERN_SUCCESS);

long tot_cpu = tot_idle + tot_user + tot_kernel

return [NSString stringWithFormat:@"Idle: %.2f, User: %.2f, Kernel: %.2f", tot_idle/tot_cpu, tot_user/tot_cpu, tot_kernel/tot_cpu];

}

但是,該方法會(huì)根據(jù)每個(gè)過程的起點(diǎn)來(lái)計(jì)算百分比。 如果您正在尋找更傳統(tǒng)的方式來(lái)計(jì)算這些數(shù)字,請(qǐng)參見Petesh的答案。

Coder256 answered 2020-07-09T18:07:39Z

總結(jié)

以上是生活随笔為你收集整理的ios android cpu占用率,iPhone-iOS-从应用程序获取CPU使用率的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜精品久久久久久99热 | 亚洲欧美一区二区三区四区五区 | 调教驯服丰满美艳麻麻在线视频 | 五十路中文字幕 | 婷婷综合 | 亚洲乱码国产乱码精品精剪 | 天天av天天干 | 一级国产特黄bbbbb | 欧美日韩激情一区 | 天天操女人 | 精品欧美一区二区三区成人 | 日本毛片在线 | 涩视频在线观看 | 蜜臀av中文字幕 | 欧美又粗又大aaa片 老熟妇仑乱视频一区二区 亚洲妇女体内精汇编 | 理论片在线观看视频 | 涩涩免费网站 | 妻色成人网 | 性生活三级视频 | 午夜免费看片 | 看特级毛片 | 色噜噜一区二区三区 | 有码中文| 国产第一页在线播放 | 在线观看黄色免费视频 | 少妇被粗大猛进进出出s小说 | 男女裸体影院高潮 | 日韩黄色免费看 | 日本免费黄色小视频 | 亚洲一二三av | 中文字幕久热 | 3d动漫精品啪啪一区二区下载 | 精品国产乱码久久久久久婷婷 | 亚洲精品专区 | 一区二区三区黄色片 | 天天色综合久久 | 日本一区二区色 | 国产21区 | 久久亚洲熟女cc98cm | 内射干少妇亚洲69xxx | 国产女人在线视频 | 国产欧美激情 | 久久久久一 | 免费裸体视频女性 | 欧美不卡视频 | 久久超碰精品 | 公交上高潮的丁芷晴 | 最新视频 - x88av | 日韩久久久精品 | 91精品国产高清一区二区三区蜜臀 | 国产片91| 无码人妻丰满熟妇啪啪网站 | 欧美日韩精品久久久免费观看 | 亚洲av无码不卡 | 亚洲a精品 | 男性裸体全身精光gay | 精品在线一区 | 四川话毛片少妇免费看 | 久久精久久 | 日本爽爽 | 一区二区三区四区五区视频 | 99免费观看| 免费在线一区二区 | 日本高清有码视频 | 成人三级在线播放 | 久久综合亚洲色hezyo国产 | 欧美 亚洲 另类 激情 另类 | xxxxhdvideos | 国产黄色免费观看 | 蜜桃精品成人影片 | 国产毛片久久久久久久 | 亚洲精品中文在线 | 久操青青| 国产又粗又大又爽 | av在线电影观看 | 欧美人妖乱大交 | 欧美淫| 亚洲一区三区 | 一级在线看 | 亚洲精品综合在线观看 | 欧美v日本 | 国产视频精品在线 | 国产日韩欧美日韩大片 | 国产第一网站 | 久久图库| 中文字幕在线观 | 伊人中文在线 | 国产精品97| 精品国产乱码久久久久久久 | 免费人妻一区二区三区 | 久久久久一区二区精码av少妇 | 成人小视频在线 | 亚洲天堂av线 | 久久久久久蜜桃一区二区 | 国产色播| 精品无码久久久久久久 | 极品白嫩丰满少妇无套 | 91ts人妖另类精品系列 | 果冻传媒18禁免费视频 |