【发布时间】:2012-02-27 22:57:27
【问题描述】:
我有一个使用 Boost 1.47.0 的 Visual Studio 2008 C++ 项目,我需要获取 boost::thread 的本机 Windows ID 以传递给 PostThreadMessage。
在 Windows Vista 和 7 中,我会这样做:
DWORD thread_id = ::GetThreadId( mythread.native_handle() );
这很好,但我还需要我的应用在不存在GetThreadId 的 XP 中工作。
我发现 boost:thread 将线程 ID 值存储在 boost::thread::id 的私有数据成员 thread_data 中。我可以通过做一些讨厌的演员来做到这一点:
boost::detail::thread_data_base* tdb = *reinterpret_cast< boost::detail::thread_data_base** >( &message_thread.get_id() );
DWORD thread_id = tdb->id;
但是,我开始收到关于引用临时 boost::thread::id 对象的编译器警告。
warning C4238: nonstandard extension used : class rvalue used as lvalue
有没有什么好的方法来获取ID?看到我需要的数据,却无法获取,非常令人沮丧。
谢谢, 保罗H
【问题讨论】:
标签: c++ windows boost boost-thread