У меня есть проект Visual Studio 2008 C ++, использующий Boost 1.47.0, где мне нужно получить собственный идентификатор Windows для boost :: thread для передачи в PostThreadMessage .
В Windows Vista и 7 я бы просто сделал следующее:
DWORD thread_id = ::GetThreadId( mythread.native_handle() );
Это нормально, но мне также нужно, чтобы мое приложение работало в XP, где GetThreadId
не существует.
Я обнаружил, что boost: thread хранит значение идентификатора потока в личном элементе данных 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
Есть ли хороший способ получить удостоверение личности? Очень неприятно видеть нужные мне данные, но я не могу их получить.
Спасибо, PaulH