2013-04-28 15 views

Antwort

11

Es gibt keine Möglichkeit, dass ein Thread autonom Zugriff auf seine eigene std::thread erhält. Dies ist absichtlich, da std::thread ein Nur-Bewegung-Typ ist.

Ich glaube, was Sie anfordern, ist ein native_handle() Mitglied von std::thread::id, und das ist ein interessanter Vorschlag. Soweit ich weiß, ist dies derzeit nicht möglich. Es würde verwendet werden wie:

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

Es wäre nicht garantiert zu arbeiten, oder sogar existieren. Ich kann mir jedoch vorstellen, dass die meisten POSIX-Plattformen dies unterstützen könnten.

Eine Möglichkeit, den C++ - Standard zu ändern, besteht darin, Probleme zu übermitteln. Here sind Anweisungen dazu.

+1

Denkst du, dass sich so etwas als Vorschlag für C++ 14 eignet? – pyCthon

+1

@NicholasPezolano: Zu dieser Zeit keine. Ich konnte jedoch durch einen motivierenden Anwendungsfall und eine Implementierung davon überzeugt werden. I.e. Ich denke, ich kenne das Risiko. Aber ich glaube nicht, dass ich den Nutzen kenne. Wenn der Nutzen gleich null ist, ist das Nutzen-Kosten-Verhältnis, egal wie niedrig die Kosten sind, gering. Sie müssten also einen großen Vorteil demonstrieren. –

+3

Ich glaube nicht, dass das OP unbedingt 'std :: thread :: id :: native_handle' will. Ich denke, der interessante Punkt ist: sollte nicht die Schnittstelle von 'std :: this_thread 'die von' std :: thread' nachahmen? Außer natürlich für die Mitglieder, die sich auf das Thread-Lifetime-Management beziehen, was, wie Sie zu Recht betonen, nicht zu viel Sinn ergibt. Das lässt nicht viel übrig, aber 'native_handle' erscheint mir als auffallend abwesend. –

1

C++ 11 bietet keinen Mechanismus zum Abrufen der aktuellen Threads native_handle.

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

Wie Howard zeigte, gibt es keine Unterstützung für diese in ISO C++ noch: Sie müssen plattformspezifische Anrufe, das heißt GetCurrentThread() unter Windows verwenden.

Aber thread::id hat eine überladene operator<< zu Druck sich auf ein ostream.

#include <iostream> 
#include <thread> 

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

Ohne die Semantik des tatsächlichen Wertes zu wissen (was sehr plattformabhängig ist), Drucken Sie es oder sie als Schlüssel in einer Karte verwendet, ist das Beste Sie ohnehin tun sollte.

Verwandte Themen