當前位置:首頁 » 礦機知識 » totapp礦機

totapp礦機

發布時間: 2021-07-13 14:45:42

㈠ 怎麼獲取某個APP的CPU和內存佔用

-(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 < 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->system_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;
}

㈡ iphone查看哪些app在使用cpu

1、前言

在iOS開發中,開發者會使用開發工具Xcode或Instruments調試觀察app運行時的CPU使用情況及線程堆棧信息。
那麼在沒有這些工具的情況下,又能方便測試人員觀察app的性能,開發者如何去收集CPU的使用率等數據供測試人員參考呢?

2、如何監測CPU的使用率?
在C語言中提供了兩個庫可以獲取當前app的運行任務及線程堆棧信息,從中我們可以計算出CPU的使用率。

#include <sys/sysctl.h>#include <mach/mach.h>

我們可以CADisplayLink 創建心跳包,監測app運行任務及線程棧信息;
計算CPU使用率核心代碼:

kern_return_t kr;
///任務信息
task_info_data_t tinfo;
///任務個數
mach_msg_type_number_t task_info_count;
///最大1024
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;

basic_info = (task_basic_info_t)tinfo;
///獲取當前執行的線程數組和個數
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;
}
}
///釋放指針
kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));
///成功
assert(kr == KERN_SUCCESS);
///返回CPU使用率
return roundf(tot_cpu);

接下來我們可以通過thread_get_state 獲取線程狀態,得到thread_state_t指針對象獲取線程的地址。
通過棧基址指針獲取當前棧幀地址:

/*
//X86 for example
SP/ESP/RSP: 棧頂部地址的棧指針
BP/EBP/RBP: 棧基地址指針
IP/EIP/RIP: 指令指針保留程序計數當前指令地址
*/#if defined(__arm64__)
return machineContext->__ss.__fp;#elif defined(__arm__)
return machineContext->__ss.__r[7];#elif defined(__x86_64__)
return machineContext->__ss.__rbp;#elif defined(__i386__)
return machineContext->__ss.__ebp;#endif

處理dlsym,對地址進行符號化解析

1.找到地址所屬的內存鏡像,
2.然後定位鏡像中的符號表
3.最後在符號表中找到目標地址的符號

3、demo 操作請查看:
https://github.com/HeXiuLian/MonitorCpuUsageProject
4、運行效果如下:

㈢ 跪求求桃花酒所有文集TOT.~

網路一下,你就知道了,各種app

㈣ THEHOHTOT中文是什麼

真的我只有他,除他之外沒有任何一個人,我也真的很愛他,用了心的愛

㈤ 愛奇藝mac 閃退,開程序都還好,一點視頻就閃退,求解決,具體問題如下,就這個樣子TOT

APP STORE裡面下載的愛奇藝嗎?看看有沒有要更新最新版本的,我用的木有閃退

㈥ ie9.0打開就停止工作,系統信息如下。 該怎麼解決。。。TOT

這.很.可.能.是.某.軟.件.的.插.件.造.成.的,你.可.以.用.殺.毒.軟.件.修.復.LSP.試.一.下

㈦ 有沒有願意帶帶我賺錢的兄弟

靠自己努力去賺錢,別人最多給個思路你

熱點內容
bonuscloud區塊鏈 發布:2025-06-27 10:39:20 瀏覽:86
kuwocn區塊鏈 發布:2025-06-27 10:36:40 瀏覽:232
人民幣里的圈是什麼意義 發布:2025-06-27 10:36:05 瀏覽:212
什麼是比特幣合法嗎 發布:2025-06-27 10:30:08 瀏覽:823
龍珠超宇宙2元氣彈mod 發布:2025-06-27 10:14:10 瀏覽:33
trx轉賬多久到 發布:2025-06-27 10:07:39 瀏覽:399
數字貨幣稀有幣 發布:2025-06-27 10:03:28 瀏覽:763
美國元宇宙板塊 發布:2025-06-27 09:54:24 瀏覽:948
幣圈大佬怎麼暴富的 發布:2025-06-27 09:51:54 瀏覽:793
以太坊官網查詢貨幣 發布:2025-06-27 09:10:22 瀏覽:837