【发布时间】:2019-12-19 23:16:18
【问题描述】:
我想在C++代码中设置当前执行线程的名称;底层线程库是 pthreads。
如果我有线程的 std::thread 句柄,我可以使用 std::thread::native_handle 获取本机 pthreads 句柄,然后将其传递给 pthread_setname_np 以设置线程名称。
auto t = std::thread(call_from_thread);
pthread_setname_np(t.native_handle(), my_thread_name.c_str());
但是在我没有可用的std::thread 句柄的情况下如何设置线程名称。例如,当线程由其他库启动时,我正在编写将由该线程执行的回调,我可以在回调中编写一些代码,为执行它的线程设置自定义名称吗?
我知道我可以使用std::this_thread::get_id 获取当前线程std::thread::id 对象。有没有办法将其转换为 pthread 本机句柄,然后可用于设置自定义线程名称?
【问题讨论】:
-
见stackoverflow.com/questions/21091000/… 然后你可以将线程句柄传递给pthread_getname_np
-
在 Windows 中,你有 this
-
如果您不关心可移植性并且正在使用(不可移植的)POSIX 线程调用,为什么不简单地使用
pthread_self? -
@Someprogrammerdude 这应该是一个答案。他们在native_handle 示例中解决类似情况的方式几乎相同。
-
有一个关于获取当前线程句柄的 LWG 问题,解决方案很简单,但没有达成共识:cplusplus.github.io/LWG/issue2379
标签: c++ multithreading pthreads stdthread