精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

開源!OpenHarmony手機CPU信息應用

系統 OpenHarmony
筆者最近寫了一個OpenHarmony開發者手機應用開獲取手機的各種信息,通過Native C++ 開發方式讀取開發板端文件獲取手機各項信息。

想了解更多關于開源的內容,請訪問:

51CTO 鴻蒙開發者社區

https://ost.51cto.com

筆者最近寫了一個OpenHarmony開發者手機應用開獲取手機的各種信息,源碼開源如下:CPU_device_information

  • 開發環境
  1. API10
  2. 硬件:OpenHarmony開發者手機
  3. OpenHarmony 4.O.10.309

OpenHarmony 開發者手機購買鏈接:https://xslht.com/dp

1.應用安裝步驟

2.實現功能

完成了開發者手機以下信息的獲取。

- CPU核心數
- SOC型號
- GPU溫度
- 主板溫度
- 系統運行時間
- RAM總內存
- RAM可用內存
- RAM空閑內存
- 緩存使用內存
- Swaps交換分區
- 系統啟動以來創建的進程數
- 上下文切換的總數
- SOC溫度
- CPU利用率
- CPU大核7溫度和利用率
- CPU中核6溫度和利用率
- CPU中核5溫度和利用率
- CPU中核4溫度和利用率
- CPU小核3溫度和利用率
- CPU小核2溫度和利用率
- CPU小核1溫度和利用率
- CPU小核0溫度和利用率
- 設備電量
- 電池電壓
- 電池型號
- 電池充電狀態
- 系統版本
- RTC時間和日期
- 內核版本信息
- 電池信息

3.功能實現邏輯

(1)通過Native C++ 開發方式讀取開發板端文件獲取手機各項信息

# 獲取SOC型號
proc/device-tree/cpuinfo_hardware 

# 獲取rtc時間
/sys/class/rtc/rtc0/time

# 獲取內核信息
/proc/version

# 獲取RTC系統日期
/sys/class/rtc/rtc0/date

# 交換分區大小
/proc/swaps

# 獲取主板熱區
/sys/class/thermal/thermal_zone27/temp

# 獲取GPU熱區
/sys/class/thermal/thermal_zone17/temp

# 獲取lit0-thmzone 小核心 0 熱區
/sys/class/thermal/thermal_zone13/temp

# 獲取lit1-thmzone 小核心 1 熱區
/sys/class/thermal/thermal_zone14/temp

# 獲取lit2-thmzone 小核心 2 熱區
/sys/class/thermal/thermal_zone15/temp

# 獲取lit3-thmzone 小核心 3 熱區
/sys/class/thermal/thermal_zone16/temp

# 獲取mid4-thmzone 中核心 4 熱區
/sys/class/thermal/thermal_zone9/temp

# 獲取mid5-thmzone 中核心 5 熱區
/sys/class/thermal/thermal_zone10/temp

# 獲取mid6-thmzone 中核心 6 熱區
/sys/class/thermal/thermal_zone11/temp

# 獲取big7-thmzone 大核心 7 熱區
/sys/class/thermal/thermal_zone7/temp

# 獲取soc-thmzone系統芯片熱區 
/sys/class/thermal/thermal_zone5/temp

# /proc/uptime 是一個特殊的文件,它提供了當前系統的運行時間信息。文件中包含了兩個數值,分別表示系統的總運行時間和空閑時間。
/proc/uptime

# 獲取內存信息
/proc/meminfo

# 獲取cpu info
/proc/cpuinfo

# 計算cpu利用率,進程計數器,正在運行的進程計數器,阻塞的進程計數器,系統發生的上下文切換次數
/proc/stat

(2)Native C++開發的api

export const getCpuCount: () => Number;                  //獲取cpu核心數
export const getMemTotal: () => String;                  //獲取RAM總內存大小
export const getFreeMem: () => String;                   //獲取空閑內存大小
export const getCachedMem: () => String;                 //獲取緩存使用內存大小
export const getAvailableMem: () => String;              //獲取可用內存大小
export const getCpuInfo: () => any;                      //獲取CPU信息
export const getMemoryInfo: () => any;                   //獲取RAM信息
export const getUptime: () => String;                    //讀取/proc/uptime,/proc/uptime 是一個特殊的文件,它提供了當前系統的運行時間信息。文件中包含了兩個數值,分別表示系統的總運行時間和空閑時間。
export const getSOCtemp: () => String;                   //獲取soc-thmzone系統芯片熱區 /sys/class/thermal/thermal_zone5/temp
export const getCPU_CORE_big7_thmzonetemp: () => String; //獲取big7-thmzone 大核心 7 熱區
export const getCPU_CORE_mid6_thmzonetemp: () => String; //獲取mid6-thmzone 中核心 6 熱區
export const getCPU_CORE_mid5_thmzonetemp: () => String; //獲取mid6-thmzone 中核心 5 熱區
export const getCPU_CORE_mid4_thmzonetemp: () => String; //獲取mid6-thmzone 中核心 4 熱區
export const getCPU_CORE_lit3_thmzonetemp: () => String; //獲取lit3-thmzone 小核心 3 熱區
export const getCPU_CORE_lit2_thmzonetemp: () => String; //獲取lit2-thmzone 小核心 2 熱區
export const getCPU_CORE_lit1_thmzonetemp: () => String; //獲取lit1-thmzone 小核心 1 熱區
export const getCPU_CORE_lit0_thmzonetemp: () => String; //獲取lit0-thmzone 小核心 0 熱區
export const getGPU_temp: () => String;                  //獲取GPU 熱區
export const getBoard_temp: () => String;                //獲取主板 熱區
export const getSwaps: () => String;                     //獲取交換分區大小
export const getRTC_Date_temp: () => String;             //獲取rtc日期
export const getKernel_version: () => String;            //獲取內核信息
export const getRTC_Time_temp: () => String;             //獲取rtc時間
export const getCpu_stat_cpu: () => String;              //獲取cpu以及各個核利用率
export const getprocesses: () => String;                 //獲取正在運行的進程數
export const getctxt: () => String;                      //獲取正在運行的進程數
export const getcpuinfo_hardware: () => String;          //獲取SOC型號

4.功能實現邏輯剖析

(1)底部導航欄、頂部狀態欄設置

參考:沉浸式界面開發

Index.ets

import window from '@ohos.window';
import common from '@ohos.app.ability.common';

  //沉浸式界面開發:https://gitee.com/openharmony/docs/blob/master/zh-cn/third-party-cases/immersion-mode.md#%E5%8F%82%E8%80%83
  context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext
  async setSystemBar() {

    let windowClass = await window.getLastWindow(this.context)
    //設置導航欄,狀態欄不可見
    /*
     * let names: Array<'status' | 'navigation'> = ['navigation'];//設置頂部狀態欄不可見
     * let names: Array<'status' | 'navigation'> = ['status'];//設置底部導航欄不可見
     * let names: Array<'status' | 'navigation'> = [];//設置
    */
    let names: Array<'status' | 'navigation'> = ["navigation"];
    await windowClass.setWindowSystemBarEnable(names)
  }

aboutToAppear() {

this.setSystemBar()

}

(2)獲取SOC型號

讀取開發板proc/device-tree/cpuinfo_hardware文件獲取SOC型號。

TestStatisticsInfo.cpp

// proc/device-tree/cpuinfo_hardware
// 查看SOC型號
napi_value TestStatisticsInfo::Getcpuinfo_hardware(napi_env env, napi_callback_info info) {
    if ((nullptr == env) || (nullptr == info)) {
        LOGE("TestStatisticsInfo::Getcpuinfo_hardware: env or info is null");
        return nullptr;
    }

    napi_value thisArg;
    if (napi_ok != napi_get_cb_info(env, info, nullptr, nullptr, &thisArg, nullptr)) {
        LOGE("TestStatisticsInfo::Getcpuinfo_hardware: napi_get_cb_info fail");
        return nullptr;
    }
    std::string time = getcpuinfo_hardware();
    LOGI("getcpuinfo_hardware success! %{public}s", time.c_str());
    napi_value res;
    napi_create_string_utf8(env, time.c_str(), strlen(time.c_str()), &res);
    return res;
}

std::string TestStatisticsInfo::getcpuinfo_hardware() {

    FILE *fp0 = fopen("proc/device-tree/cpuinfo_hardware", "r");
    if (NULL == fp0) {
        LOGE("TestStatisticsInfo:getcpuinfo_hardware failed to open cpuinfo =======");
        return 0;
    }
    std::string temp0 = "";
    char buffer0[1024]{};
    fgets(buffer0, sizeof(buffer0), fp0);
    temp0.assign(buffer0); // 將buffer轉換為字符串類型并賦值給time。
    LOGE("TestStatisticsInfo::getcpuinfo_hardware %{public}d =======", buffer0);
    fclose(fp0);

    return temp0;
}
index.d.ts

export const getcpuinfo_hardware: () => String;          //獲取SOC型號
@State cpuinfo_hardware: String = '';

  //aboutToAppear函數在創建自定義組件的新實例后,在執行其build()函數之前執行。允許在aboutToAppear函數中改變狀態變量,更改將在后續執行build()函數中生效。
  aboutToAppear() {

    //getcpuinfo_hardware
    this.cpuinfo_hardware = testStatisticsApi.getcpuinfo_hardware();
    console.log("========Cpu_stat_cpu is ",this.cpuinfo_hardware)

}

(3)獲取cpu以及各個核利用率、正在運行的進程數、上下文切換的總數

讀取開發板proc/stat目錄獲取。

# cat proc/stat
cpu  136846 473 429582 992274 115 40307 14266 0 0 0
cpu0 37440 30 120671 435245 107 10714 3552 0 0 0
cpu1 35618 28 108085 58002 1 8694 3314 0 0 0
cpu2 17470 20 58705 74576 6 8023 3100 0 0 0
cpu3 13264 13 53196 77765 0 7046 2920 0 0 0
cpu4 12691 121 33814 81271 0 2239 554 0 0 0
cpu5 12134 134 34550 84395 0 2245 444 0 0 0
cpu6 5407 83 14615 87894 0 1123 236 0 0 0
cpu7 2819 41 5944 93124 0 219 143 0 0 0
intr 28465308 0 303012 15607597 0 0 926124 2759258 0 0 0 0 6706602 0 0 0 0 0 0 0 0 0 0 0 0 0 1506 0 0 0 69 0 734 0 20 302 26293 19428 358 11614 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49979 0 0 0 0 0 0 1916 0 0 0 0 0 0 1477101 13 0 225612 3534 0 0 0 0 0 105 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 8 51 3 0 0 0 0 0 0 0 0 0 2 0 0 49 0 341969 17 30 0 1933
ctxt 45507242
btime 534
processes 6746
procs_running 5
procs_blocked 0
softirq 7457395 112 685658 199 4997 15826 0 3684 2582028 0 4164891

以上參數含義解釋如下:

  • cpu: 包含了 CPU 的使用情況統計信息,依次表示用戶態時間、Nice 值為負的進程在用戶態的CPU時間、系統態時間、空閑時間、等待IO的時間、硬中斷時間、軟中斷時間和虛擬化的CPU操作時間。
  • cpu0 - cpu7: 每個核心的 CPU 使用情況統計信息,格式與全局的 cpu 行相同。
  • intr: 包含了中斷請求的統計信息,依次表示總的中斷數以及每種中斷的具體計數。
  • ctxt: 上下文切換的次數,包括進程切換和內核線程切換。
  • btime: 系統啟動時間
  • processes: 啟動以來創建的進程數。
  • procs_running: 當前正在執行的進程數量。
  • procs_blocked: 當前被阻塞的進程數量。
  • softirq: 軟中斷的統計信息,依次表示軟中斷的次數和每種軟中斷的具體計數。

注意:需要修改開發板/vendor/etc/init.uis7885.cfg文件將proc/stat的權限改為777。

TestStatisticsInfo.cpp

std::string TestStatisticsInfo::getCpu_stat(std::string field) {

    std::ifstream meminfo("/proc/stat");
    std::string line;
    std::string cpu0Field = "cpu0";
    std::string cpu1Field = "cpu1";
    std::string cpu2Field = "cpu2";
    std::string cpu3Field = "cpu3";
    std::string cpu4Field = "cpu4";
    std::string cpu5Field = "cpu5";
    std::string cpu6Field = "cpu6";
    std::string cpu7Field = "cpu7";
    std::string cpuField = "cpu\u0020";
    std::string processesField = "processes"; // processes: 進程計數器統計。這個字段表示當前運行的進程數量。
    std::string procs_runningField = "procs_running"; //procs_running: 正在運行的進程計數器統計。這個字段表示當前正在運行的進程數量。
    std::string procs_blockedField = "procs_blocked";//procs_blocked: 阻塞的進程計數器統計。這個字段表示當前被阻塞的進程數量。
    std::string ctxtField = "ctxt";//上下文切換計數器統計。這個字段表示系統發生的上下文切換次數,可以用于評估系統的調度性能。
    while (getline(meminfo, line)) {
        if (line.find(processesField) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[processesField] = res;
        } 
        if (line.find(procs_runningField) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[procs_runningField] = res;
        }
        if (line.find(procs_blockedField) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[procs_blockedField] = res;
        }
        if (line.find(ctxtField) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[ctxtField] = res;
        }
        if (line.find(cpu7Field) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[cpu7Field] = res;
        }
        if (line.find(cpu6Field) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[cpu6Field] = res;
        }
        if (line.find(cpu5Field) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[cpu5Field] = res;
        }
        if (line.find(cpu4Field) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[cpu4Field] = res;
        }
        if (line.find(cpu3Field) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[cpu3Field] = res;
        }
        if (line.find(cpu2Field) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[cpu2Field] = res;
        }
        if (line.find(cpu1Field) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[cpu1Field] = res;
        }
        if (line.find(cpu0Field) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[cpu0Field] = res;
        }
        if (line.find(cpuField) != std::string::npos) {
            std::string res = line;
            _Cpu_stat[cpuField] = res;
        }
    }
    return _Cpu_stat[field];
}

(4)獲取cpu以及各個核利用率

根據/proc/stat 文件內容可以計算 Linux CPU 利用率。

# cat proc/stat
cpu  136846 473 429582 992274 115 40307 14266 0 0 0
cpu0 37440 30 120671 435245 107 10714 3552 0 0 0
cpu1 35618 28 108085 58002 1 8694 3314 0 0 0
cpu2 17470 20 58705 74576 6 8023 3100 0 0 0
cpu3 13264 13 53196 77765 0 7046 2920 0 0 0
cpu4 12691 121 33814 81271 0 2239 554 0 0 0
cpu5 12134 134 34550 84395 0 2245 444 0 0 0
cpu6 5407 83 14615 87894 0 1123 236 0 0 0
cpu7 2819 41 5944 93124 0 219 143 0 0 0

這是一個 CPU(中央處理器)使用情況的統計信息。每一行都表示一個 CPU 核心的使用情況。
下面是對每一列的解釋:

cpu: 總體統計信息
cpu0、cpu1、cpu2、等等:各個 CPU 核心的統計信息
user: 用戶模式下運行時間
nice: 優先級較低的用戶模式下運行時間
system: 內核模式下運行時間
idle: 空閑時間
iowait: 等待輸入/輸出完成的時間
irq: 處理硬件中斷的時間
softirq: 處理軟件中斷的時間
steal: 被虛擬化主機偷取的時間
guest: 運行虛擬 CPU 的時間
guest_nice: 運行虛擬 CPU 且優先級較低的時間

在 /proc/stat 文件中,CPU 利用率的時間單位是“時鐘滴答”(clock ticks)。每個 Linux 系統都有一個時鐘線程(clock tick),它以固定的速率生成時鐘滴答來驅動系統的計時器。時鐘滴答的大小依賴于系統的硬件和配置。它通常以毫秒(ms)為單位,但也可能以微秒(μs)或納秒(ns)為單位,具體取決于系統。要獲取實際的時間單位,你可以查看 /proc/timer_list 或 /proc/timer_stats 文件中的信息。需要注意的是,這些時鐘滴答并不是以獨立的單位存在的,它們僅用于相對測量和計算 CPU 的利用率。因此,在分析 CPU 利用率時,我們通常關注的是兩個時間點之間的差異,而不是實際的時鐘滴答值本身。
  • 計算方式:

cpu總時間 = user + nice + system + idle + iowait + irq + softirq + stealstolen + guest + guest_nice
在一段時間內獲取兩次cpu時間分配信息。
兩次的cpu總時間:total_2 - total_1
兩次的cpu剩余時間:idle_2 - idle_1
兩次的cpu使用時間:used = (total_2 - total_1) - (idle_2 - idle_1)
cpu使用率 = 使用時間 / 總時間 * 100% = used / total * 100%

TestStatisticsInfo.cpp

//計算cpu利用率
std::string TestStatisticsInfo::calculateCpuUtilization(std::string& a,std::string& a_second) {
    std::istringstream iss_a(a);
    std::istringstream iss_a_second(a_second);

    // 提取每個字段的值
    std::string cpu_name, cpu_name_second;
    int user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice;
    int user_second, nice_second, system_second, idle_second, iowait_second, irq_second, softirq_second, steal_second,
        guest_second, guest_nice_second;

    iss_a >> cpu_name >> user >> nice >> system >> idle >> iowait >> irq >> softirq >> steal >> guest >> guest_nice;
    iss_a_second >> cpu_name_second >> user_second >> nice_second >> system_second >> idle_second >> iowait_second >>
        irq_second >> softirq_second >> steal_second >> guest_second >> guest_nice_second;

    // 計算總的 CPU 時間和空閑 CPU 時間
    int total_time = user + nice + system + idle + iowait + irq + softirq + steal;
    int total_time_second = user_second + nice_second + system_second + idle_second + iowait_second + irq_second +
                            softirq_second + steal_second;
    int idle_time = idle + iowait;
    int idle_time_second = idle_second + iowait_second;

    // 計算 CPU 利用率
    double cpu_utilization =
        100.0 * (1.0 - (idle_time_second - idle_time) / static_cast<double>(total_time_second - total_time));
    
    return std::to_string(cpu_utilization);
}

// 計算cpu利用率
napi_value TestStatisticsInfo::GetCpu_stat_cpu(napi_env env, napi_callback_info info) {
    if ((nullptr == env) || (nullptr == info)) {
        LOGE("TestStatisticsInfo::GetCachedMem: env or info is null");
        return nullptr;
    }

    napi_value thisArg;
    if (napi_ok != napi_get_cb_info(env, info, nullptr, nullptr, &thisArg, nullptr)) {
        LOGE("TestStatisticsInfo::GetCpu_stat_cpu: napi_get_cb_info fail");
        return nullptr;
    }
    std::string cpu_cached0 = getCpu_stat("cpu\u0020");
    std::string cpu0_cached0 = getCpu_stat("cpu0");
    std::string cpu1_cached0 = getCpu_stat("cpu1");
    std::string cpu2_cached0 = getCpu_stat("cpu2");
    std::string cpu3_cached0 = getCpu_stat("cpu3");
    std::string cpu4_cached0 = getCpu_stat("cpu4");
    std::string cpu5_cached0 = getCpu_stat("cpu5");
    std::string cpu6_cached0 = getCpu_stat("cpu6");
    std::string cpu7_cached0 = getCpu_stat("cpu7");
    
    std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 延時 100 毫秒
    
    std::string cpu_cached1 = getCpu_stat("cpu\u0020");
    std::string cpu0_cached1 = getCpu_stat("cpu0");
    std::string cpu1_cached1 = getCpu_stat("cpu1");
    std::string cpu2_cached1 = getCpu_stat("cpu2");
    std::string cpu3_cached1 = getCpu_stat("cpu3");
    std::string cpu4_cached1 = getCpu_stat("cpu4");
    std::string cpu5_cached1 = getCpu_stat("cpu5");
    std::string cpu6_cached1 = getCpu_stat("cpu6");
    std::string cpu7_cached1 = getCpu_stat("cpu7");
    
    std::string cpu = calculateCpuUtilization(cpu_cached0, cpu_cached1);
    std::string cpu0 = calculateCpuUtilization(cpu0_cached0, cpu0_cached1);
    std::string cpu1 = calculateCpuUtilization(cpu1_cached0, cpu1_cached1);
    std::string cpu2 = calculateCpuUtilization(cpu2_cached0, cpu2_cached1);
    std::string cpu3 = calculateCpuUtilization(cpu3_cached0, cpu3_cached1);
    std::string cpu4 = calculateCpuUtilization(cpu4_cached0, cpu4_cached1);
    std::string cpu5 = calculateCpuUtilization(cpu5_cached0, cpu5_cached1);
    std::string cpu6 = calculateCpuUtilization(cpu6_cached0, cpu6_cached1);
    std::string cpu7 = calculateCpuUtilization(cpu7_cached0, cpu7_cached1);
    
    std::string aaa = cpu + " " + cpu0 + " " + cpu1 + " " + cpu2 + " " + cpu3 + " " + cpu4 + " " + cpu5 + " " + cpu6 + " " + cpu7;
    
    LOGI("GetCpu_stat_cpu success! Cached is %{public}s", aaa.c_str());
    napi_value res;
    napi_create_string_utf8(env, aaa.c_str(), strlen(aaa.c_str()), &res);
    return res;
}
index.d.ts

export const getCpu_stat_cpu: () => String;              //獲取cpu以及各個核利用率
Index.ts

import testStatisticsApi from 'libentry.so';

  @State Cpu_stat_cpu: String = '';

      //getCpu_stat_cpu
      this.Cpu_stat_cpu = testStatisticsApi.getCpu_stat_cpu();
      console.log("========Cpu_stat_cpu is ",this.Cpu_stat_cpu)

        Text(
              "SOC溫度:"+ (Number(this.soctemp)/1000).toFixed(3) +"°C" + "\t\t\t  CPU利用率:" + (Number(this.Cpu_stat_cpu.split(" ")[0])).toFixed(3) +
              "\nCPU大核7溫度:"+(Number(this.CPU_CORE_big7_temp)/1000).toFixed(3) +"°C" + "\tCPU大核7利用率:" +  (Number(this.Cpu_stat_cpu.split(" ")[8])).toFixed(3) +
              "\nCPU中核6溫度:"+(Number(this.CPU_CORE_mid6_temp)/1000).toFixed(3) +"°C" + "\tCPU中核6利用率:" +  (Number(this.Cpu_stat_cpu.split(" ")[7])).toFixed(3) +
              "\nCPU中核5溫度:"+(Number(this.CPU_CORE_mid5_temp)/1000).toFixed(3) +"°C" + "\tCPU中核5利用率:" +  (Number(this.Cpu_stat_cpu.split(" ")[6])).toFixed(3) +
              "\nCPU中核4溫度:"+(Number(this.CPU_CORE_mid4_temp)/1000).toFixed(3) +"°C" + "\tCPU中核4利用率:" +  (Number(this.Cpu_stat_cpu.split(" ")[5])).toFixed(3) +
              "\nCPU小核3溫度:"+(Number(this.CPU_CORE_lit3_temp)/1000).toFixed(3) +"°C" + "\tCPU小核3利用率:" +  (Number(this.Cpu_stat_cpu.split(" ")[4])).toFixed(3) +
              "\nCPU小核2溫度:"+(Number(this.CPU_CORE_lit2_temp)/1000).toFixed(3) +"°C" + "\tCPU小核2利用率:" +  (Number(this.Cpu_stat_cpu.split(" ")[3])).toFixed(3) +
              "\nCPU小核1溫度:"+(Number(this.CPU_CORE_lit1_temp)/1000).toFixed(3) +"°C" + "\tCPU小核1利用率:" +  (Number(this.Cpu_stat_cpu.split(" ")[2])).toFixed(3) +
              "\nCPU小核0溫度:"+(Number(this.CPU_CORE_lit0_temp)/1000).toFixed(3) +"°C" + "\tCPU小核0利用率:" +  (Number(this.Cpu_stat_cpu.split(" ")[1])).toFixed(3)
        )

(5)獲取上下文切換的總數

TestStatisticsInfo.cpp

// 獲取proc/stat文件的ctxt: 上下文切換的總數
napi_value TestStatisticsInfo::Getctxt(napi_env env, napi_callback_info info) {
    if ((nullptr == env) || (nullptr == info)) {
        LOGE("TestStatisticsInfo::Getctxt: env or info is null");
        return nullptr;
    }

    napi_value thisArg;
    if (napi_ok != napi_get_cb_info(env, info, nullptr, nullptr, &thisArg, nullptr)) {
        LOGE("TestStatisticsInfo::Getctxt: napi_get_cb_info fail");
        return nullptr;
    }
    std::string cached = getCpu_stat("ctxt");
    LOGI("getCpu_stat success! Cached is %{public}s", cached.c_str());
    napi_value res;
    napi_create_string_utf8(env, cached.c_str(), strlen(cached.c_str()), &res);
    return res;
}

(6)啟動的進程數

TestStatisticsInfo.cpp

//獲取proc/stat文件的processes: 啟動的進程數
napi_value TestStatisticsInfo::Getprocesses(napi_env env, napi_callback_info info) {
    if ((nullptr == env) || (nullptr == info)) {
        LOGE("TestStatisticsInfo::Getprocesses: env or info is null");
        return nullptr;
    }

    napi_value thisArg;
    if (napi_ok != napi_get_cb_info(env, info, nullptr, nullptr, &thisArg, nullptr)) {
        LOGE("TestStatisticsInfo::Getprocesses: napi_get_cb_info fail");
        return nullptr;
    }
    std::string cached = getCpu_stat("processes");
    LOGI("getCpu_stat success! Cached is %{public}s", cached.c_str());
    napi_value res;
    napi_create_string_utf8(env, cached.c_str(), strlen(cached.c_str()), &res);
    return res;
}

想了解更多關于開源的內容,請訪問:

51CTO 鴻蒙開發者社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 鴻蒙開發者社區
相關推薦

2022-03-02 16:08:31

Harmony應用開發鴻蒙

2022-04-18 10:37:01

鴻蒙操作系統開發工具

2022-05-18 09:38:45

開源手機Android應用智能手機

2021-06-06 16:05:31

OpenHarmony

2010-02-04 15:19:38

C++獲取CPU信息

2023-04-17 16:14:55

靜態訂閱鴻蒙

2023-03-01 14:55:09

2022-11-04 14:58:59

應用開發鴻蒙

2022-04-29 14:56:40

通話應用源碼剖析

2021-10-13 07:18:40

鴻蒙HarmonyOS應用

2022-09-21 14:58:11

OH應用簽名鴻蒙

2023-05-19 16:43:10

移植無人機鴻蒙

2023-05-23 14:53:26

鴻蒙應用開發

2022-10-08 16:19:40

智能喂食器鴻蒙

2022-06-20 15:27:00

socket對話鴻蒙

2022-11-07 15:40:22

數據轉碼應用應用開發

2022-11-11 09:37:58

數據轉碼應用開發

2024-01-11 15:54:55

eTS語言TypeScript應用開發

2023-03-09 15:10:49

應用開發鴻蒙
點贊
收藏

51CTO技術棧公眾號

无码人妻久久一区二区三区蜜桃| 亚洲一区三区视频在线观看| 久久久国产高清| 综合色就爱涩涩涩综合婷婷| 在线观看精品一区| 中文字幕日韩一区二区三区不卡| 国产乱码精品一区二三区蜜臂 | 中文字幕在线观看视频免费| 久久国产综合| 亚洲第一色在线| 中文字幕永久视频| 四虎影视国产在线视频| 91麻豆swag| 亚洲xxx自由成熟| 欧美成人一区二区三区四区| 欧美日韩日本国产亚洲在线| 国产亚洲视频在线观看| 中文字幕无码毛片免费看| 五月天av在线| 一区二区三区产品免费精品久久75| 国产伦精品一区二区三区视频黑人 | 欧美 日韩 国产 在线| 丝袜美腿亚洲一区| 久久久久久久久网站| 天天干天天舔天天操| 国产精品欧美大片| 91麻豆精品国产91久久久更新时间 | 三级黄色免费观看| 日韩精品免费一区二区夜夜嗨| 欧美精品一级二级三级| 免费大片在线观看| √8天堂资源地址中文在线| 中文字幕在线播放不卡一区| 欧美日韩精品不卡| 五月婷婷在线播放| 粉嫩av一区二区三区粉嫩| 国产一区二区丝袜| 精人妻无码一区二区三区| 在线成人h网| 欧美精品久久久久久久久| 免费成人深夜夜行网站| 日韩理论在线| 中文字幕亚洲在线| 国产精品天天干| 欧美日韩123| 亚洲欧洲日产国产网站| 久久久久国产精品区片区无码| 911亚洲精品| 精品欧美乱码久久久久久| 午夜免费一级片| 国产国产一区| 欧美日韩精品三区| 好男人www社区| 日本成人福利| 欧美精品视频www在线观看| 污视频免费在线观看网站| 韩国主播福利视频一区二区三区| 欧美视频在线视频| 国产精品333| 在线看的毛片| 日本大香伊一区二区三区| 久久婷婷五月综合色国产香蕉| 僵尸再翻生在线观看免费国语| 香蕉成人伊视频在线观看| 久久99久久久久久| 成人爽a毛片免费啪啪动漫| 亚洲国产精品一区二区久久| 高清欧美精品xxxxx| 波多野在线观看| 福利精品视频在线| 日韩精品一区二区三区久久| 日韩性xxx| 欧美色精品天天在线观看视频| 久久午夜夜伦鲁鲁一区二区| 成人亚洲网站| 欧美日韩在线一区二区| 天堂av在线8| 精品久久免费| 亚洲国产日韩欧美在线99| 一区二区免费在线观看视频| 九九热爱视频精品视频| 中文字幕日韩视频| 日本精品人妻无码77777| 欧美视频官网| 青青久久aⅴ北条麻妃| 亚洲免费视频二区| 国产乱码精品一品二品| 国产在线欧美日韩| 成人免费高清在线播放| 综合av第一页| 黄页免费在线观看视频| 日韩电影免费观看高清完整版| 欧美美女喷水视频| 精品无码av一区二区三区| 亚洲第一福利社区| 俺去了亚洲欧美日韩| 久久免费公开视频| 久久久人人人| 91文字幕巨乱亚洲香蕉| 亚洲人妻一区二区| 日韩美女视频19| 欧美日韩国产精品激情在线播放| 香蕉久久久久久| 亚洲国产高清自拍| 萌白酱视频在线| 亚洲精品免费观看| 国产精品丝袜久久久久久不卡| 亚洲av无码乱码国产麻豆| 久久综合色8888| 大桥未久一区二区| 中文字幕不卡三区视频| 7777精品伊人久久久大香线蕉最新版| 欧美日韩人妻精品一区在线| 日韩一区亚洲二区| 91大神在线播放精品| 国产精品国产av| 97久久超碰国产精品| 97超碰免费观看| 国产超碰精品| 亚洲国产精品一区二区久| 四虎地址8848| 久久中文精品| 精品国产免费一区二区三区| 日韩子在线观看| 在线看不卡av| 国产成人无码一区二区在线观看| 久久精品亚洲人成影院| 国产成人精品日本亚洲专区61| www.蜜臀av| 亚洲欧洲精品天堂一级| 国产又黄又猛视频| 欧美男男freegayvideosroom| 久久这里只有精品99| 中文字幕天堂在线| 久久在线观看免费| dy888午夜| av在线成人| www.日韩av.com| 69视频免费看| 亚洲国产精品国自产拍av| 免费国产a级片| 福利片一区二区| 欧美人与物videos| 99久久精品国产一区色| 国产精品久99| 国产探花在线看| 欧美三级三级| 国产精品高清免费在线观看| 欧美777四色影视在线| 午夜激情综合网| 国产精品嫩草av| av不卡在线| 国精产品99永久一区一区| 黄网在线免费看| 精品动漫一区二区三区在线观看| 欧洲猛交xxxx乱大交3| 国产真实乱偷精品视频免| 亚洲欧美日韩不卡| 久久国际精品| 欧美黄色免费网站| 亚洲精品久久久蜜桃动漫| 亚洲精品视频在线观看免费 | 福利电影一区二区三区| 国产情侣第一页| 激情av综合| 国产成人综合亚洲| av大片在线观看| 欧美日韩久久久| 一区二区国产精品精华液| 美女精品自拍一二三四| 在线不卡日本| 涩爱av色老久久精品偷偷鲁| 久久久亚洲成人| 天堂a中文在线| 欧美综合在线视频| 国产免费美女视频| 国产成人精品午夜视频免费| 成年女人18级毛片毛片免费| 麻豆成人入口| 国产精品久久综合av爱欲tv| 九七久久人人| 亚洲白虎美女被爆操| 黄色大片网站在线观看| 97精品久久久久中文字幕| 人人干人人视频| 国产精品99一区二区三| 成人91视频| 亚洲色图官网| 日韩视频亚洲视频| 欧美一级在线免费观看| 色综合激情久久| 爱爱视频免费在线观看| 99久久免费视频.com| 亚洲高清在线观看一区| 久草视频视频在线播放| 精品视频1区2区| 久久久久久久久久久网| 99re热视频这里只精品| 牛夜精品久久久久久久| 欧美区国产区| 免费看成人片| 国产精品日本一区二区不卡视频 | 好操啊在线观看免费视频| 精品国产91亚洲一区二区三区婷婷| 日本中文字幕第一页| 亚洲欧美综合网| 欧美图片一区二区| 国产一区二区女| 乱子伦视频在线看| 欧美激情第二页| 日韩妆和欧美的一区二区| 精品一区二区三区中文字幕在线| 欧洲成人午夜免费大片| 中文字幕在线观看网站| 亚洲人午夜精品免费| 亚洲AV无码成人片在线观看| 欧美午夜电影网| 中文字幕亚洲精品在线| 亚洲九九爱视频| 天堂在线中文视频| 99视频精品全部免费在线| 涩涩网站在线看| 久久高清国产| 欧美,日韩,国产在线| 91精品婷婷色在线观看| 天堂√在线观看一区二区| 欧美xxxx在线| 动漫精品视频| 美女久久精品| 国产欧美精品久久久| 悠悠资源网亚洲青| 91精品国产色综合久久不卡98口 | 国产福利精品一区二区三区| 日本亚洲天堂网| 亚洲国产精品毛片av不卡在线| 国产欧美一级| 国产在线精品91| 国产一区激情| 可以在线看黄的网站| 日韩久久精品网| 亚洲欧美日产图| 日本精品黄色| 色一情一乱一伦一区二区三区| 欧美黄色影院| 精品国产一区二区三区日日嗨| 婷婷视频一区二区三区| 亚洲最大激情中文字幕| 成人精品在线| 亚洲精品免费网站| 国产精品亚洲综合在线观看| 成人精品视频99在线观看免费| 99欧美精品| 国产精品丝袜久久久久久高清 | 97在线中文字幕| 欧美高清hd| 国产精品久久国产三级国电话系列| 视频精品一区| 国产精品白丝jk白祙| 136国产福利精品导航网址应用| 99在线观看视频网站| 97久久综合精品久久久综合| 成人18视频| 少妇高潮一区二区三区| 久久另类ts人妖一区二区| 九九热精品视频在线观看| 日韩三级电影| 亚洲a在线视频| 中文精品无码中文字幕无码专区| 欧美三级小说| 男人揉女人奶房视频60分| 久久久亚洲人| 一区二区免费av| 国产99精品视频| 国产精品无码一区二区三区| 久久久国产精品午夜一区ai换脸| 九一在线免费观看| 亚洲欧美电影院| 日韩免费观看一区二区| 一本久道久久综合中文字幕 | 精品在线一区二区| 久久精品无码一区二区三区毛片 | 欧美剧情片在线观看| 国产日韩在线观看一区| 亚洲国产三级网| 国产黄色片在线观看| 久久久999国产精品| h片在线观看| 国产精品吹潮在线观看| 免费观看亚洲天堂| 久久久久天天天天| 99久久夜色精品国产亚洲1000部| 国产 欧美 日韩 一区| 噜噜噜躁狠狠躁狠狠精品视频| 天堂网在线免费观看| 国产91精品入口| 国产三级短视频| 亚洲一区在线观看免费观看电影高清| www.国产一区二区| 欧美精品日韩精品| 亚洲 欧美 自拍偷拍| www.久久撸.com| 中文在线аv在线| 亚洲精品欧美一区二区三区| 午夜精品福利影院| 青青草原网站在线观看| 久久久成人网| 亚洲无人区码一码二码三码| 欧美国产日韩在线观看| 久久精品欧美一区二区| 欧美性xxxxxx少妇| 欧美一级视频免费| 久久电影一区二区| 国产精品亲子伦av一区二区三区| 国产日韩精品久久| 一区二区三区四区在线观看国产日韩 | 亚洲国产一区二区三区高清| 中文字幕 欧美日韩| 久久久久9999亚洲精品| 国产亚洲精品女人久久久久久| 欧美日韩综合在线| 污污视频在线免费看| 欧美成人三级视频网站| 久久精品超碰| 日本不卡一区二区三区在线观看 | 欧美美乳视频| 久久99久久99精品| 国产一区二区精品久久| 亚欧精品视频一区二区三区| 精品日韩视频在线观看| 午夜精品小视频| 久久视频免费在线播放| 国产成人福利夜色影视| 欧美成人免费在线| 99在线|亚洲一区二区| www.黄色网| 一区二区三区国产| 精品人妻无码一区二区色欲产成人| 深夜精品寂寞黄网站在线观看| 日韩美女在线看免费观看| 久久久久一区二区| av成人激情| 无遮挡aaaaa大片免费看| 亚洲最新视频在线观看| 99热这里只有精品3| 久久久精品一区| 精品国产亚洲一区二区三区大结局| 亚洲国产精品影视| 激情丁香综合五月| 九九热视频在线免费观看| 欧美日韩一级黄| 日本成人网址| 亚洲自拍另类欧美丝袜| 欧美暴力喷水在线| 不许穿内裤随时挨c调教h苏绵| 夜夜嗨av一区二区三区网页 | 天天操天天摸天天干| 日韩激情av在线播放| 色多多在线观看| 欧美日韩国产综合视频在线| 首页综合国产亚洲丝袜| 免费在线观看a视频| 欧美人伦禁忌dvd放荡欲情| 黄色av网站在线播放| 91中文字精品一区二区| 亚洲全部视频| 午夜伊人狠狠久久| 91精选在线观看| 国产xxxx振车| 国产·精品毛片| 日本三级理论片| 亚洲精选中文字幕| 欧美三级精品| 在线精品日韩| 国产不卡一区视频| 亚洲国产成人精品激情在线| 日韩成人中文字幕在线观看| 欧美极品免费| www亚洲国产| av毛片久久久久**hd| 国产精品suv一区| 精品国模在线视频| 日韩视频一二区| 欧美色图色综合| 国产精品每日更新在线播放网址| 精品国产亚洲AV| 日本精品一区二区三区在线播放视频| 欧美日韩国产传媒| 在线观看你懂的视频| 欧美日韩精品在线视频| 幼a在线观看| 国产精品亚洲综合| 蜜臀av一级做a爰片久久| 日韩欧美中文字幕视频| 亚洲奶大毛多的老太婆| 超碰国产精品一区二页| 国产欧美日韩小视频| 国产精品色眯眯| 天天干天天草天天射| 国产精品丝袜久久久久久不卡| 国产一区亚洲|