Android:找出线程正在运行的核心

 2023-01-20    323  

问题描述

我正在尝试为Android编写代码,这将为我提供处理器的某种信息(ID?)以及线程正在运行的核心.

我已经搜索了一些灵感来源,但没有运气.我所知道的是,我很可能需要一些C/C ++调用.

Android:找出线程正在运行的核心

我的工作量如下:

#include <jni.h>

int getCpuId() {
    // missing code
    return 0;
}

int getCoreId() {
    // missing code    
    return 0;
} 

JNIEXPORT int JNICALL Java_com_spendoptima_Utils_getCpuId(JNIEnv * env,
        jobject obj) {
    return getCpuId();
}

JNIEXPORT int JNICALL Java_com_spendoptima_Utils_getCoreId(JNIEnv * env,
        jobject obj) {
    return getCoreId();
}

整个项目编译并运行良好.我能够从Java内调用功能,并得到适当的答复.

这里有人可以填写空白吗?

推荐答案

好消息是,必要的库和系统调用是在Android上定义的(sched_getcpu() and __ getcpu()).坏消息是,它们不是NDK的一部分.

您可以使用这个答案.

另一种方法是读取/proc/self/stat并解析processor条目. proc(5)man page 描述格式:

/proc/[pid]/stat
         Status  information  about  the process.  This is used by ps(1).
         It is defined in /usr/src/linux/fs/proc/array.c.
  ...
         processor %d (since Linux 2.2.8)
                     CPU number last executed on.

这要慢得多,如果内核更新,”文件”格式可能会更改,因此不是推荐的方法.

其他推荐答案

这似乎对我有用:

//...
#include <sys/syscall.h>
//...
int getCpuId() {

    unsigned cpu;
    if (syscall(__NR_getcpu, &cpu, NULL, NULL) < 0) {
        return -1;
    } else {
        return (int) cpu;
    }
}
//...

以上所述是小编给大家介绍的Android:找出线程正在运行的核心,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/25913.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。