2013-09-23 2 views
1
void Test 
{ 
    boost::thread::id id0 = boost::this_thread::get_id(); 
    int iThreadId = id0; // ***here, how could I cast 'id0' to 'iThreadId'*** 
} 

누군가가 어떻게하는지 말해 줄 수 있습니까?어떻게 내가 boost :: this_thread :: get_id() int로 변환 할 수 있을까?

+5

왜이 작업을 수행 하시겠습니까? – orlp

+0

또한 _object_에서 _object_로 캐스팅 할 수 없습니다. _value_를 _another type_으로 변환합니다. – sehe

+0

이 스레드는 상당히 오래되었지만, 어떤 이유로 든 필요한 스레드에 대해서는 여전히 대답 할 것입니다. boost :: thread :: id를 boost :: lexical_cast를 사용하여 int로 변환 할 수 있습니다. (thread_id); –

답변

0

std::hash<>boost::thread::id이 같은이, std::hash<std::thread::id

에 대한 전문입니다.

그래서 당신은 중요한 표현을 얻을 수

std::hash<boost::thread::id>(thread_id); 

를 사용할 수 있습니다. 물론 (슬프게도) 이것은 해시로 사용되어야하기 때문에, 생성 된 해시가 각 스레드마다 고유하다는 보장이 없을 수도 있습니다. 당신은 여전히 ​​당신의 (버전의) 라이브러리에 대한 문서를 찾아 보는 것이 좋습니다.

그러나 예를 들어. 키가 unordered_map 인 경우 걱정할 필요가 없습니다.

은 또는 당신이 'API 호환'당신의 사전 C++ 11 스레딩 솔루션되고 싶어 경우 당신이 구현에 의존 기능을 사용하여 상관 없어, 당신은 std::thread::native_handle 사용할 수 있습니다. 이것은 '이전'스레딩 API가 노출 한 것과 동일한 유형을 가질 가능성이 높습니다. ( std::thread::native_handle_type 구현이 정의 됨)

+0

'boost :: thread :: native_handle'도 존재합니다. –