Mam projekt Visual Studio 2008 C++ za pomocą Boost 1.47.0, gdzie muszę uzyskać macierzysty identyfikator Windows boost :: wątek, aby przekazać do PostThreadMessage.Uzyskiwanie ID boost :: wątku dla PostThreadMessage
W systemie Windows Vista i 7, ja po prostu to zrobić:
DWORD thread_id = ::GetThreadId(mythread.native_handle());
To jest w porządku, ale muszę także moją aplikację do pracy w XP gdzie GetThreadId
nie istnieje.
Znalazłem to zwiększenie: wątek przechowuje wartość identyfikatora wątku w boost :: thread :: id's private data member thread_data
. Mogę dostać się że wykonując kilka nieprzyjemnych odlewane:
boost::detail::thread_data_base* tdb = *reinterpret_cast< boost::detail::thread_data_base** >(&message_thread.get_id());
DWORD thread_id = tdb->id;
Ale ja zaczynam się ostrzeżenia kompilatora dla przedstawieniu tymczasowego boost::thread::id
obiekt.
warning C4238: nonstandard extension used : class rvalue used as lvalue
Czy istnieje dobry sposób na uzyskanie identyfikatora? To bardzo frustrujące, gdy dostrzegam dane, których potrzebuję, ale nie mogę się do nich dostać.
Dzięki PaulH
To najfajniejsza rzecz, jaką widziałem dzisiaj. Zmarnuję kolejne 3 godziny, próbując to zrozumieć. Dzięki! – PaulH
+1 za dodatkowe uwagi objaśniające. – PaulH