2013-09-23 32 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_轉換爲_另一種類型_。 – sehe

+0

雖然這個帖子相當陳舊,但我還是會爲那些因爲某些原因需要它的人提供答案。 您可以使用boost :: lexical_cast將boost :: thread :: id轉換爲int (thread_id); –

回答

0

std::hash<>是專門爲std::hash<std::thread::id

有可能的,boost::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'也存在。 –