Разница между get_id и GetCurrentThreadId - PullRequest
1 голос
/ 19 ноября 2011

Я хочу получить идентификатор потока через boost::thread:::get_id и GetCurrentThreadId.но результаты разные.Я использую Boost :: Thread для многопоточности.Почему один и тот же поток имеет два разных идентификатора, используя get_id и GetCurrentThreadId?

  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 ]

2 голосов
/ 19 ноября 2011

Есть куча проблем с вашим кодом и вашим вопросом.

  1. GetCurrentThreadId возвращает идентификатор потока Windows потока, вызывающего функцию. В вашем примере dl_thread не является потоком, вызывающим функцию.
  2. boost::thread::id является абстракцией и может напрямую соответствовать или не соответствовать определению ОС для идентификатора потока. Не безопасно предполагать, что boost::thread::id может использоваться взаимозаменяемо с DWORD. Шенинганы, которые вы должны были пройти, чтобы сравнить их, должны были дать вам подсказку, что это так.

Наконец, чтобы ответить на ваш вопрос: тот же поток не имеет другого идентификатора, даже если вы использовали boost::this_thread::get_id и сравнили это с dl_thread.get_id, они были бы другими, потому что они являются различными темами.

0 голосов
/ 19 ноября 2011

У вас там две темы. И второе - созданное Boost, даже не работает ...

Повышающий поток не знает ничего о потоке приложения, из которого он был запущен. Нет даже способа, как вы могли бы «назначить» этот поток любому экземпляру boost: thread. Метод boost :: thread ::: get_id возвращает идентификатор класса потоков, которыми управляет только boost: thread, а не система. И поток, в котором вы выполняете вызов GetCurrentThreadId, управляется (вероятно) системой ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...