API学习--函数篇(2)GetCurrentThreadId()和GetCurrentProcessId(),getpid()和gettid()

目录

 

GetCurrentThreadId()和GetCurrentProcessId(); 

getpid()和gettid()


GetCurrentThreadId()和GetCurrentProcessId(); 

DWORD WINAPI GetCurrentThreadId(void);
//库文件kernel32.h

该函数获取当前线程一个唯一的线程标识符。

DWORD WINAPI GetCurrentProcessId(void);
//库文件kernel32.h

获取当前进程的标识符。

getpid()和gettid()

pid:     process id           进程id

tid:      thread  id            线程id

getpid():

//函数原型:int _getpid(void);
#include <process.h>//需加头文件
int main()
{
    printf("pid=%d\n",getpid());
    return 0;
}

gettid():

window编程中没有直接给出gettid(),可以封装:

int _gettid(void)
{
    return GetCurrentThreadId();
}

 

### 获取线程ID (TID) 的方法 在 Android 中有多种方式可以获取线程 ID (TID),具体取决于是在 Java 层还是 Native 层操作。 #### 在 Java 层获取 TID 可以直接使用 `android.os.Process` 类提供的静态方法来获得当前线程的 TID: ```java int tid = android.os.Process.myTid(); Log.e("调用线程", "java 线程id:" + tid);[^3] ``` 这段代码展示了如何记录日志并打印出当前线程的 TID 值。此方法适用于任何基于 JVM 运行的应用程序组件,包括但不限于 Service, BroadcastReceiver ContentProvider 等。 #### 使用 Logcat 查看 TID 当应用程序输出调试信息到 logcat 日志系统时,默认情况下每条日志都会附带 PID TID 信息。可以通过命令行工具 adb 或者 Android Studio 内置的日志查看器观察这些数据流。例如,在应用中添加如下日志语句可以帮助追踪特定任务执行所在的线程: ```java Log.d("stl","ViewRootImpl "+android.os.Process.myPid()+" Thread: "+android.os.Process.myTid()+" name "+Thread.currentThread().getName());[^1] ``` 这将显示进程 ID(PID), 线程 ID(TID) 及其名称给开发者用于诊断目的。 #### 在 C/C++ 层面获取 TID 对于那些涉及到 JNI 调用或是完全由原生代码构成的部分,则应采用操作系统 API 来取得相应的标识符。比如 Linux/Unix 平台上的 `_getpid()` `_pthread_self()` 函数分别用来返回进程号与线程号;而在 Windows 上则是通过 `GetCurrentProcessId()` `GetCurrentThreadId()` 实现相同功能[^2]。 不过需要注意的是,在某些版本的 Android NDK 开发环境中可能无法直接访问上述标准库函数,此时可考虑借助其他手段如 ART runtime 提供的支持服务来进行查询。例如下面的例子是从 ART Runtime 获取当前线程的真实 TID : ```cpp #include <unistd.h> // ... void* thread_func(void*) { int tid = gettid(); // POSIX compliant way to obtain the real thread id on Unix-like systems. printf("Native thread id is %d\n", tid); } ``` 另外一种更贴近 Android 架构的方式是利用 ART 自身暴露出来的接口完成同样的工作: ```cpp tls32_.tid = ::art::GetTid();[^4] ``` 这里展示了一个来自 AOSP 源码片段,它说明了内部是如何初始化 TLS(Thread Local Storage) 存储区内的 TID 字段值。 综上所述,无论是处于哪个层次面上开发 Android 应用,都有相应的方法能够方便快捷地拿到所需的线程识别号码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值