我有一个使用Boost 1.47.0的Visual Studio 2008 C++项目,我需要将boost :: thread的本机Windows ID传递给PostThreadMessage。获取PostThreadMessage的boost :: thread的ID
在Windows Vista和Windows 7,我只是这样做:
DWORD thread_id = ::GetThreadId(mythread.native_handle());
这是好的,但我也需要我的应用程序在XP中工作,其中GetThreadId
不存在。
我发现boost:线程将线程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?看到我需要的数据是非常令人沮丧的,但无法得到它。
感谢, PaulH
这是我今天看到的最酷的事情。我会浪费接下来的3个小时试图理解它。谢谢! – PaulH 2012-02-28 14:19:47
+1为额外的解释性说明。 – PaulH 2012-02-29 15:15:49