get_id和GetCurrentThreadId之间的区别

时间:2011-11-19 08:59:28

标签: c++ windows boost-thread

我希望通过boost::thread:::get_idGetCurrentThreadId获取主题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(); 

2 个答案:

答案 0 :(得分:2)

您的代码和问题都存在许多问题。

  1. GetCurrentThreadId返回调用该函数的线程的Windows线程ID。在您的示例中,dl_thread不是调用该函数的线程。
  2. boost::thread::id是一个抽象,可能或可能不直接对应于OS特定的线程ID概念。假设boost::thread::id可与DWORD互换使用是不安全的。你必须经过比较两者的铸造恶作剧应该给你一个提示,就是这样。
  3. 最后,回答你的问题:同一个帖子没有具有不同的ID,即使您使用boost::this_thread::get_id并将其与dl_thread.get_id进行比较,它们也会有所不同,因为他们不同的主题。

答案 1 :(得分:0)

你有两个主题。第二个 - 由boost创建,甚至没有运行......

Boost线程对运行的应用程序线程一无所知。甚至没有方法可以将这个线程“分配”给任何boost:thread实例。方法boost :: thread ::: get_id返回由boost:thread管理的线程的类id,而不是系统。并且执行GetCurrentThreadId调用的线程(可能)由系统管理...