2013-04-28 250 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; 
} 

不知道实际值的语义(这是高度依赖于平台),打印,或使用它作为一个地图的关键是你应该做的反正最。

相关问题