2013-04-28 158 views

回答

11

線程無法自主訪問自己的std::thread。這是有意的,因爲std::thread是一種移動類型。

我相信你所要求的是std::thread::idnative_handle()成員,這是一個有趣的建議。據我所知目前還不可能。它會被用來像:

void foo() 
{ 
    auto native_me = std::this_thread::get_id().native_handle(); 
    // ... 
} 

它不能保證工作,甚至存在。不過我想大多數POSIX平臺都可以支持它。

嘗試更改C++標準的一種方法是提交問題。 Here是如何這樣做的方向。

+1

您認爲這樣的事情值得作爲C++ 14的提議提交嗎? – pyCthon 2013-04-28 03:49:59

+1

@NicholasPezolano:此時沒有。然而,我可以通過一個激勵用例和一個實現來證明它。即我想我知道成本/風險。但我不認爲我知道這個好處。如果收益爲零,那麼無論成本如何低,收益/成本比率都很差。所以你需要證明一個很大的好處。 – 2013-04-29 02:30:10

+3

我不認爲OP必然需要'std :: thread :: id :: native_handle'。我認爲有趣的一點是:不應該'std :: this_thread'的接口模仿'std :: thread'的接口嗎?當然,對於那些涉及線程生命週期管理的成員來說,正如你正確地指出的那樣,沒有太大意義。這並沒有留下太多的東西,但'native_handle'明顯地缺席了我。 – 2013-04-30 04:13:05

1

C++ 11不提供獲取當前線程native_handle的機制。您必須使用特定於平臺的調用,即Windows上的GetCurrentThread():

void foo() 
{ 
    auto native_me = ::GetCurrentThread(); 
} 
1

正如Howard指出的那樣,ISO C++中尚不支持這種調用。

thread::id有一個重載operator<<打印本身的ostream

#include <iostream> 
#include <thread> 

int main() 
{ 
    std::cout << "Current thread ID: " << std::this_thread::get_id() << std::endl; 
} 

不知道實際值的語義(這是高度依賴於平臺),打印,或使用它作爲一個地圖的關鍵是你應該做的反正最。

相關問題