如何设置 "this" 线程的自定义名称?
How to set custom name of "this" thread?
我想在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 本机句柄,然后可用于设置自定义线程名称?
除非需要可移植性,并且目标只是具有 POSIX 个线程的 POSIX 系统,否则可以使用 pthread_self
.
轻松获得 ID
为了方便复制粘贴,我粘贴了一个额外的答案:
pthread_setname_np(pthread_self(), "Specific name");
我想在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 本机句柄,然后可用于设置自定义线程名称?
除非需要可移植性,并且目标只是具有 POSIX 个线程的 POSIX 系统,否则可以使用 pthread_self
.
为了方便复制粘贴,我粘贴了一个额外的答案:
pthread_setname_np(pthread_self(), "Specific name");