totapp礦機
㈠ 怎麼獲取某個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.試.一.下
㈦ 有沒有願意帶帶我賺錢的兄弟
靠自己努力去賺錢,別人最多給個思路你