2013-04-28 11 views

Odpowiedz

11

Nie ma sposobu, aby wątek mógł samodzielnie uzyskać dostęp do własnego std::thread. Jest to celowe, ponieważ std::thread jest typem przeniesienia.

Wierzę, że to, o co prosisz, to native_handle() członek std::thread::id i jest to interesująca sugestia. O ile mi wiadomo, obecnie nie jest to możliwe. Zostanie on użyty jako:

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

Nie można zagwarantować działania, a nawet istnieć. Jednak wyobrażam sobie, że większość platform POSIX może go wspierać.

Jednym ze sposobów próby zmiany standardu C++ jest zgłaszanie problemów. Here są wskazówki, jak to zrobić.

+1

myślisz, że coś takiego warto przesłać jako propozycję dla C++ 14? – pyCthon

+1

@NicholasPezolano: W tej chwili nie. Jednak przekonał mnie motywujący przypadek użycia i implementacja demonstrująca to. To znaczy. Myślę, że znam koszt/ryzyko. Ale nie sądzę, że znam tę korzyść. Jeżeli korzyść wynosi zero, to niezależnie od tego, jak niski jest koszt, stosunek korzyści do kosztów jest niski. Więc musisz wykazać dużą korzyść. –

+3

Nie sądzę, że OP koniecznie chce 'std :: thread :: id :: native_handle'. Myślę, że interesujące jest to: czy interfejs 'std :: this_thread' nie powinien naśladować interfejsu' std :: thread'? Z wyjątkiem oczywiście tych członków, którzy odnoszą się do zarządzania życiem wątku, co, jak słusznie wskazujesz, nie ma zbyt wielkiego sensu. To nie pozostawia wiele, ale "native_handle" uderza mnie w widoczny sposób nieobecny. –

1

C++ 11 nie zapewnia mechanizmu uzyskiwania bieżących wątków native_handle. Musisz użyć połączenia konkretnych platform, tj GetCurrentThread() w systemie Windows:

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

Jak zauważył Howard, nie ma wsparcia dla tego w ISO C++ jeszcze.

Ale thread::id ma przeciążony operator<< do drukuj sam do ostream.

#include <iostream> 
#include <thread> 

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

Bez znajomości semantyki rzeczywistej wartości (co jest wysoce zależne od platformy), drukowanie lub używając go jako klucz w mapie jest najbardziej należy robić tak.

Powiązane problemy