Получение идентификатора boost :: thread для PostThreadMessage

У меня есть проект 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

5
задан PaulH 27 February 2012 в 22:57
поделиться