我有一個使用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