Ist es möglich, boost::thread
einen Namen zu geben, damit die Debugger-Tabellen und die Absturzprotokolle besser lesbar sind? Wie?Geben Sie einem Boost-Thread einen Namen?
Antwort
Sie müssten auf das zugrunde liegende Thread-Primitiv zugreifen und einen Namen systemabhängig zuweisen. Debugging- und Crash-Logs sind inhärent systemabhängig und boost :: thread befasst sich mehr mit der Nicht-System-Abhängigkeit, d. H. Mit der Portabilität.
Es scheint (http://www.boost.org/doc/libs/1_43_0/doc/html/thread.html), dass es keine dokumentierte Möglichkeit gibt, auf zugrunde liegende Systemressourcen für einen Boost-Thread zuzugreifen. (Aber ich habe es mir nie so kann ich etwas vermissen.)
Edit: (Wie David im Kommentar schreibt) http://www.boost.org/doc/libs/1_43_0/doc/html/thread/thread_management.html#thread.thread_management.thread.nativehandle
Ich verwende boost 1.50.0 auf Win32 + VS2010 und thread::native_handle
enthält Nummer was ich nicht geschafft habe, irgendetwas im System zu paaren. Auf der anderen Seite gibt die Methode thread::get_id()
direkt Windows-Thread-ID in Form einer hexadezimalen Zeichenfolge zurück. Beachten Sie, dass der zurückgegebene Wert jedoch plattformspezifisch ist. Der folgende Code funktioniert unter Boost 1.50.0 + Win32 + VS2010. Teile des Codes wiederverwendet von msdn
const DWORD MS_VC_EXCEPTION = 0x406D1388;
#pragma pack(push, 8)
typedef struct THREADNAME_INFO {
DWORD dwType; // Must be 0x1000.
LPCSTR szName; // Pointer to name (in user addr space).
DWORD dwThreadID; // Thread ID (-1=caller thread).
DWORD dwFlags; // Reserved for future use, must be zero.
} THREADNAME_INFO;
#pragma pack(pop)
void _SetThreadName(DWORD threadId, const char* threadName) {
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = threadName;
info.dwThreadID = threadId;
info.dwFlags = 0;
__try {
RaiseException(MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info);
}
__except(EXCEPTION_EXECUTE_HANDLER) {
}
}
void SetThreadName(boost::thread::id threadId, std::string threadName) {
// convert string to char*
const char* cchar = threadName.c_str();
// convert HEX string to DWORD
unsigned int dwThreadId;
std::stringstream ss;
ss << std::hex << threadId;
ss >> dwThreadId;
// set thread name
_SetThreadName((DWORD)dwThreadId, cchar);
}
Aufruf wie folgt aus:
boost::thread* thr = new boost::thread(boost::bind(...));
SetThreadName(thr->get_id(), "MyName");
Sie vermissen die Struktur 'THREADNAME_INFO' und' MS_VC_EXCEPTION'. Gibt es keinen besseren Weg, um die Nummer von der boost :: thread :: id zu bekommen? eek. – David
Tut mir leid, ich habe keine Ahnung, wie es passiert ist, sollte jetzt abgeschlossen sein. Wie für die Thread-Nummer - ich weiß es nicht. Boost-Dokumente sagen, dass es überhaupt keinen Weg gibt ... – Odin
Sie können die Thread-ID erhalten, indem Sie GetThreadId (in
- 1. Geben Sie einem anonymen Zweig einen Namen
- 2. PHP: Geben Sie einem Array von JSON-Objekten einen Namen?
- 3. Eine Plugin-Klasse einen lesbaren Namen geben
- 4. Geben Sie einem Klassenobjekt einen Wert C#
- 5. Wie Sie JSON Array in Perl einen Namen geben
- 6. Geben Sie BT: MAKE-THREAD einen sichtbaren sichtbaren Namen (SBCL)
- 7. Geben Sie einer Variablen in JavaScript einen zweiten Namen
- 8. Starten Sie einen Prozess mit einem Namen
- 9. Geben Sie einen Namen in ein Textfeld ein, aber senden Sie eine ID?
- 10. Erstellen Sie eine Kopie einer Datei und geben Sie ihr einen anderen Namen Mac-Terminal
- 11. Funken: Geben Sie einen Vektor
- 12. Roboterrahmenwerk, generische Funktion, um einer Liste einen Namen zu geben
- 13. OpenLayers: Kann ich dem Marker einen Namen, eine Beschreibung geben?
- 14. Teilen Sie eine Textdatei in C und geben Sie ihr einen Namen
- 15. Geben Sie einen rightview UIImageView zu einem UITextField
- 16. Geben Sie einen Kommentar zu einem bestimmten Beitrag in PHP
- 17. geben einen Dateinamen
- 18. Den hochgeladenen Bildern einen eindeutigen Namen für mysqli geben
- 19. Wie Sie Ihrem Server den Domain-Namen geben
- 20. Wenn zwei Zellen in einer Reihe übereinstimmen, dann müssen Sie einen Namen geben und die nächste Zeile müssen einen anderen Namen dynamisch in Excel geben VBA
- 21. Welchen Namen geben Sie der MSBuild-Projekt-Build-Datei?
- 22. Geben Sie dem Bild einen Namen, wenn die Intent-Kamera verwendet wird
- 23. Kann ich einem NG-Formular einen Namen geben, den ich mit $ pristine überprüfen kann?
- 24. Kann ich einem XBL-Handler einen Namen geben, um ihn anzurufen?
- 25. Wie kann man einem jsfiddle.net Code Snippet einen lesbaren Namen geben?
- 26. Cucumber.js: Geben Sie Szenarien einen zweiten Versuch
- 27. Kinect: Geben Sie dem Gelenk den gemeinsamen Namen
- 28. Geben Sie den Namen des Dropdown-Listenfelds jquery ein.
- 29. So geben Sie ein Element ohne spezifischen Namen an
- 30. Geben Sie den Namen benutzerdefinierten Index, wenn add_reference
+1, 'boost :: thread' eine' native_handle' Methode, die verwendet werden können, die native API Griff des abrufen Faden. Sie müssten in die Thread-Bibliothek einsteigen, um zu wissen, was der bestimmte Typ ist, den es zurückgibt, und die API-Dokumentation, wie man dieses Handle benutzt, um ihm einen Namen zu geben ... –
Für Linux: http://stackoverflow.com/questions/778085/how-to-name-a-thread-in-linux – moala
Für Windows: http://stackoverflow.com/questions/905876/how-to-set-name-to-a-win32-thread – moala