首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >给boost线程起个名字?

给boost线程起个名字?
EN

Stack Overflow用户
提问于 2010-07-27 17:14:46
回答 2查看 11K关注 0票数 17

是否可以为boost::thread命名,以便调试器表和崩溃日志更具可读性?多么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-27 17:39:42

您需要访问底层的线程原语,并以系统相关的方式分配一个名称。调试和崩溃日志本质上是系统相关的,而boost::thread更多地是关于非系统依赖性的,即关于可移植性。

( http://www.boost.org/doc/libs/1_43_0/doc/html/thread.html )似乎没有记录在案的方式来访问boost线程的底层系统资源。(但我自己从来没有用过它,所以我可能会错过一些东西。)

编辑:(大卫在评论中写道) http://www.boost.org/doc/libs/1_43_0/doc/html/thread/thread_management.html#thread.thread_management.thread.nativehandle

票数 6
EN

Stack Overflow用户

发布于 2012-07-16 21:25:18

我在Win32 + VS2010上使用boost 1.50.0,thread::native_handle包含的数字我没有设法与系统中的任何东西配对。另一方面,thread::get_id()方法以十六进制字符串的形式直接返回Windows线程ID。但请注意,返回的值是特定于平台的。以下代码在Boost 1.50.0 + Win32 + VS2010下工作。从msdn重用的部分代码

const DWORD MS_VC_EXCEPTION = 0x406D1388;
#pragma pack(push, 8)
typedef struct THREADNAME_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)

void _SetThreadName(DWORD threadId, const char* threadName) {
    THREADNAME_INFO info;
    info.dwType = 0x1000;
    info.szName = threadName;
    info.dwThreadID = threadId;
    info.dwFlags = 0;
    __try {
        RaiseException( MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info );
    }
    __except(EXCEPTION_EXECUTE_HANDLER) {
    }
}
void SetThreadName(boost::thread::id threadId, std::string threadName) {
    // convert string to char*
    const char* cchar = threadName.c_str();
    // convert HEX string to DWORD
    unsigned int dwThreadId;
    std::stringstream ss;
    ss << std::hex << threadId;
    ss >> dwThreadId;
    // set thread name
    _SetThreadName((DWORD)dwThreadId, cchar);
}

像这样调用:

boost::thread* thr = new boost::thread(boost::bind(...));
SetThreadName(thr->get_id(), "MyName");
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3342159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档