Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ get_id和GetCurrentThreadId之间的差异_C++_Windows_Boost Thread - Fatal编程技术网

C++ get_id和GetCurrentThreadId之间的差异

C++ get_id和GetCurrentThreadId之间的差异,c++,windows,boost-thread,C++,Windows,Boost Thread,我想通过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_cas

我想通过
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(); 
boost::thread*dl_thread=m_thread_组。创建_thread(boost::bind(下载,url,dest));
*threadId=*重新解释类型转换(&dl_-thread->get_-id());
DWORD threadIdsss=GetCurrentThreadId();

您的代码和问题有很多问题

  • GetCurrentThreadId
    返回调用函数的线程的Windows线程id。在您的示例中,dl_线程不是调用函数的线程
  • boost::thread::id
    是一种抽象,可能与操作系统特定的线程id概念直接对应,也可能不直接对应。假设
    boost::thread::id
    可以与
    DWORD
    互换使用是不安全的。你为了比较这两个角色而不得不经历的演员把戏应该给你一个暗示,这就是事实

  • 最后,回答您的问题:同一个线程没有不同的id,即使您使用了
    boost::this\u-thread::get\u-id
    并将其与
    dl\u-thread进行比较。get\u-id
    它们会不同,因为它们是不同的线程。

    您有两个线程。第二个-由boost创建,甚至没有运行


    Boost线程不知道从中运行的应用程序线程的任何信息。甚至没有方法可以将这个线程“分配”给boost:thread的任何实例。方法boost::thread::get_id返回仅由boost:thread管理的线程的类id,而不由系统管理。执行GetCurrentThreadId调用的线程(可能)由系统管理

    在您的代码中,dl_线程与ThreadId()不同。由于您从一个主线程(我在这里假设)启动所有内容,因此GetCurrentThreadId()返回主线程的Id,而*threadId保存已启动线程的Id。