gpt4 book ai didi

android - 如何在android ndk中获取线程名称

转载 作者:太空狗 更新时间:2023-10-29 16:14:45 25 4
gpt4 key购买 nike

在我的 Android 项目中,我正在使用 std::thread。我也在一些 Linux 和 OSX 项目中使用相同的 C++ 代码。

出于调试目的,我想分配人类可读的线程名称,我通过调用 pthread_setname_np()(因为缺少 std::thread::set_name()).

在稍后的调试输出的情况下,我尝试通过调用 pthread_getname_np() 来获取当前线程名称,这很有效,例如在 Linux 目标上。

但令我惊讶的是,Android Ndk pthread.h 中没有 pthread_getname_np(),例如ndk-bundle/platforms/android-19/arch-arm/usr/include/pthread.h 也不在 ndk-bundle/platforms/android-21/arch-arm/usr/include/pthread.h

一个愚蠢的前向声明尝试:

extern "C" int pthread_getname_np(pthread_t, char*, size_t);

因链接器错误而失败(如预期)。

知道如何从 C/C++ 代码中获取 Android 中当前线程的人类可读名称吗?

最佳答案

您可以在 dalvik/vm/Thread.cpp 中查看 Dalvik 如何设置它们.如果可用,它使用 pthread_setname_np(),如果不可用,则使用 prctl(PR_SET_NAME)。因此,如果 pthread_getname_np() 不可用——请记住“np”的意思是“不可移植”——您可以使用 prctl(PR_GET_NAME) 获取Linux 下的 16 字节空终止字符串。

您可以通过在 /proc 条目中四处寻找其他位。

如果您对名称的大小和格式有特定要求,那么您可能想要定义一个 pthread 键并将其放入线程本地存储中。它需要更多工作,但它具有一致性和便携性。

关于android - 如何在android ndk中获取线程名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com