File tree Expand file tree Collapse file tree 7 files changed +30
-14
lines changed
Expand file tree Collapse file tree 7 files changed +30
-14
lines changed Original file line number Diff line number Diff line change @@ -68,7 +68,7 @@ ColumnsQueryPtr PlayerImpl::createColumnsQuery(const std::vector<std::string>& c
6868
6969std::unique_ptr<WorkQueue> PlayerImpl::createWorkQueue ()
7070{
71- return std::make_unique<ThreadWorkQueue>(MSRV_PROJECT_ID " -control" );
71+ return std::make_unique<ThreadWorkQueue>(MSRV_THREAD_NAME ( MSRV_PROJECT_ID " -control" ) );
7272}
7373
7474void PlayerImpl::connect ()
Original file line number Diff line number Diff line change 1717namespace msrv {
1818
1919ServerHost::ServerHost (Player* player)
20- : player_(player), utilityQueue_(8 , MSRV_PROJECT_ID " -io" )
20+ : player_(player), utilityQueue_(8 , MSRV_THREAD_NAME( MSRV_PROJECT_ID " -io" ) )
2121{
2222 playerWorkQueue_ = player_->createWorkQueue ();
2323 player_->onEvents ([this ](PlayerEvents event) { handlePlayerEvents (event); });
Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ ServerThread::ServerThread(ServerReadyCallback readyCallback)
1111 readyCallback_ (std::move(readyCallback))
1212{
1313 thread_ = std::thread ([this ] {
14- setThreadName (MSRV_PROJECT_ID " -server" );
14+ setThreadName (MSRV_THREAD_NAME ( MSRV_PROJECT_ID " -server" ) );
1515 run ();
1616 });
1717}
Original file line number Diff line number Diff line change 1818namespace msrv
1919{
2020
21- inline void setThreadName (const char * name);
22-
2321template <typename Traits>
2422class Handle
2523{
@@ -94,7 +92,11 @@ class Handle
9492
9593#if MSRV_OS_POSIX
9694
97- void setThreadName (const char * name)
95+ #define MSRV_THREAD_NAME (s ) s
96+
97+ typedef const char * ThreadName;
98+
99+ inline void setThreadName (ThreadName name)
98100{
99101#if defined(HAVE_PTHREAD_SETNAME_NP)
100102 (void ) pthread_setname_np (pthread_self (), name);
@@ -132,10 +134,12 @@ inline ErrorCode lastSystemError() noexcept
132134
133135#if MSRV_OS_WINDOWS
134136
135- void setThreadName (const char * name)
136- {
137- (void )name;
138- }
137+ #define MSRV_THREAD_NAME_ (s ) L ## s
138+ #define MSRV_THREAD_NAME (s ) MSRV_THREAD_NAME_(s)
139+
140+ typedef const wchar_t * ThreadName;
141+
142+ void setThreadName (ThreadName name);
139143
140144struct WindowsHandleTraits
141145{
Original file line number Diff line number Diff line change 44
55namespace msrv {
66
7+ typedef HRESULT (WINAPI *SetThreadDescriptionFunc)(HANDLE thread, LPCWSTR name);
8+
9+ void setThreadName (ThreadName name)
10+ {
11+ static auto setName = reinterpret_cast <SetThreadDescriptionFunc>(
12+ GetProcAddress (LoadLibraryA (" kernelbase.dll" ), " SetThreadDescription" ));
13+
14+ if (setName)
15+ setName (GetCurrentThread (), name);
16+ }
17+
718const char * formatError (ErrorCode errorCode, char * buffer, size_t size) noexcept
819{
920 auto ret = ::FormatMessageA (
Original file line number Diff line number Diff line change @@ -8,7 +8,7 @@ namespace msrv {
88
99WorkQueue::~WorkQueue () = default ;
1010
11- ThreadWorkQueue::ThreadWorkQueue (const char * name)
11+ ThreadWorkQueue::ThreadWorkQueue (ThreadName name)
1212{
1313 thread_ = std::thread ([this , name] {
1414 if (name)
@@ -62,7 +62,7 @@ void ThreadWorkQueue::run()
6262 }
6363}
6464
65- ThreadPoolWorkQueue::ThreadPoolWorkQueue (size_t workers, const char * name)
65+ ThreadPoolWorkQueue::ThreadPoolWorkQueue (size_t workers, ThreadName name)
6666{
6767 assert (workers > 0 );
6868
Original file line number Diff line number Diff line change 11#pragma once
22
33#include " defines.hpp"
4+ #include " system.hpp"
45
56#include < thread>
67#include < mutex>
@@ -29,7 +30,7 @@ class WorkQueue
2930class ThreadWorkQueue : public WorkQueue
3031{
3132public:
32- explicit ThreadWorkQueue (const char * name = nullptr );
33+ explicit ThreadWorkQueue (ThreadName name = nullptr );
3334 ~ThreadWorkQueue ();
3435
3536 void enqueue (WorkCallback callback) override ;
@@ -48,7 +49,7 @@ class ThreadWorkQueue : public WorkQueue
4849class ThreadPoolWorkQueue : public WorkQueue
4950{
5051public:
51- explicit ThreadPoolWorkQueue (size_t workers, const char * name = nullptr );
52+ explicit ThreadPoolWorkQueue (size_t workers, ThreadName name = nullptr );
5253 ~ThreadPoolWorkQueue ();
5354
5455 void enqueue (WorkCallback callback) override ;
You can’t perform that action at this time.
0 commit comments