Tôi có một Visual Studio 2008 C++ dự án bằng cách sử dụng Boost 1.47.0 nơi tôi cần để có được Windows ID gốc của một tăng :: thread để vượt qua để PostThreadMessage.Lấy ID của một tăng :: thread cho PostThreadMessage
Trong Windows Vista và 7, tôi sẽ chỉ làm điều này:
DWORD thread_id = ::GetThreadId(mythread.native_handle());
này là tốt, nhưng tôi cũng cần ứng dụng của tôi để làm việc trong XP nơi GetThreadId
không tồn tại.
Tôi đã nhận thấy rằng tăng: chuỗi lưu trữ giá trị ID luồng trong tăng :: thread :: thành viên dữ liệu riêng tư của id thread_data
. Tôi có thể lấy đó bằng cách thực hiện một số phôi khó chịu:
boost::detail::thread_data_base* tdb = *reinterpret_cast< boost::detail::thread_data_base** >(&message_thread.get_id());
DWORD thread_id = tdb->id;
Nhưng, tôi bắt đầu nhận được những cảnh báo trình biên dịch cho tham khảo một đối tượng tạm thời boost::thread::id
.
warning C4238: nonstandard extension used : class rvalue used as lvalue
Có cách nào tốt để lấy ID không? Nó rất bực bội khi thấy mảnh dữ liệu tôi cần, nhưng không thể có được nó.
Cảm ơn, PaulH
Đó là điều tuyệt vời nhất tôi đã thấy hôm nay. Tôi sẽ lãng phí trong 3 giờ tới để cố gắng hiểu nó. Cảm ơn! – PaulH
+1 cho ghi chú giải thích thêm. – PaulH