|
Boost : |
Subject: Re: [boost] Adding an option to set the name of a boost::thread
From: Lars Viklund (zao_at_[hidden])
Date: 2012-11-06 14:03:24
On Tue, Nov 06, 2012 at 12:50:23PM -0600, david.hagood_at_[hidden] wrote:
> Has any thought been given to allowing a name to be set on a
> boost::thread, such that (if the underlying implementation supports it)
> that name would show up in things like top and ps?
>
> In Linux, you can name a thread via the prctl() call and it will show up
> in top - dandy for debugging which of the bazillion threads in my app has
> decided to suck up all the CPU.
>
> I don't know if Windows supports such a call, and IMHO it would be
> acceptable if the call did nothing in such a case.
>
> Ideally, I'd want to see it as a property, something like:
>
> void boost::thread::set_name(std::string name)
> std::string boost::thread::get_name() const;
On VC++, the following names a thread.
const DWORD MS_VC_EXCEPTION=0x406D1388;
inline void SetThreadName(DWORD dwThreadID, char const* threadName)
{
#pragma pack(push,8)
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // Must be 0x1000.
LPCSTR szName; // Pointer to name (in user addr space).
DWORD dwThreadID; // Thread ID (-1=caller thread).
DWORD dwFlags; // Reserved for future use, must be zero.
} THREADNAME_INFO;
#pragma pack(pop)
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = threadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
__try
{
RaiseException( MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR),
(ULONG_PTR*)&info );
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
}
}
-- Lars Viklund | zao_at_[hidden]
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk