2011-11-19 1 views
1

boost::thread:::get_idGetCurrentThreadId을 통해 스레드 ID를 가져 오려고합니다. 하지만 결과는 다릅니다. 나는 boost :: thread를 사용하여 멀티 스레딩을 수행합니다. 왜 같은 스레드가 get_id와 GetCurrentThreadId를 사용하는 두 개의 다른 id를 가지고 있습니까?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(); 
+0

dl_thread는 ThreadId()와 다릅니다. 하나의 주 스레드 (여기에서 가정 함)에서 모든 것을 시작하므로 GetCurrentThreadId()는 주 스레드의 ID를 반환하지만 * threadId는 이미 시작된 스레드의 ID를 보유합니다. – LordDoskias

답변

2

코드 및 질문에 많은 문제가 있습니다.

  1. GetCurrentThreadId은 함수를 호출하는 스레드의 Windows 스레드 ID를 반환합니다. 귀하의 예제에서 dl_thread는 함수를 호출하는 스레드가 아닙니다.
  2. boost::thread::id은 추상이며 스레드 ID의 OS 고유 개념에 직접적으로 대응할 수도 있고 그렇지 않을 수도 있습니다. boost::thread::idDWORD과 교환하여 사용할 수 있다고 가정하는 것은 안전하지 않습니다. 두 사람을 비교하기 위해 통과해야하는 주조 헛소리는 이것이 사실이라는 암시를주었습니다. 마지막으로

는 귀하의 질문에 대답하기 : 동일한 스레드 당신이 boost::this_thread::get_id을 사용하고 다른 스레드이기 때문에 dl_thread.get_id에 그들은 서로 다른 것이라고 비교하더라도, 다른 ID를 가지고 있지 않습니다.

0

두 개의 스레드가 있습니다. 그리고 부스트에 의해 생성 된 두 번째는 심지어 실행되지 않습니다 ...

부스트 스레드 실행 된 응용 프로그램 스레드에 대해 아무것도 모릅니다. boost : thread의 인스턴스에이 스레드를 "할당"하는 방법도 없습니다. 메소드 boost :: thread ::: get_id는 boost가 관리하는 쓰레드의 클래스 id를 리턴한다. 쓰레드는 시스템이 아니라 쓰레드이다. GetCurrentThreadId 호출을 수행하는 스레드는 시스템에 의해 (아마) 관리됩니다 ...