我希望通过boost::thread:::get_id
和GetCurrentThreadId
获取主题ID。
但结果却不同。
我使用boost :: thread来做多线程。为什么同一个线程使用get_id和GetCurrentThreadId有两个不同的ID?
boost::thread* dl_thread = m_thread_group.create_thread(boost::bind(download,url,dest));
*threadId = *reinterpret_cast<DWORD*>(&dl_thread->get_id());
DWORD threadIdsss = GetCurrentThreadId();
答案 0 :(得分:2)
您的代码和问题都存在许多问题。
GetCurrentThreadId
返回调用该函数的线程的Windows线程ID。在您的示例中,dl_thread不是调用该函数的线程。boost::thread::id
是一个抽象,可能或可能不直接对应于OS特定的线程ID概念。假设boost::thread::id
可与DWORD
互换使用是不安全的。你必须经过比较两者的铸造恶作剧应该给你一个提示,就是这样。最后,回答你的问题:同一个帖子没有具有不同的ID,即使您使用boost::this_thread::get_id
并将其与dl_thread.get_id
进行比较,它们也会有所不同,因为他们是不同的主题。
答案 1 :(得分:0)
你有两个主题。第二个 - 由boost创建,甚至没有运行......
Boost线程对运行的应用程序线程一无所知。甚至没有方法可以将这个线程“分配”给任何boost:thread实例。方法boost :: thread ::: get_id返回由boost:thread管理的线程的类id,而不是系统。并且执行GetCurrentThreadId调用的线程(可能)由系统管理...