Czy można nadać nazwę boost::thread
, aby tabele debugerów i dzienniki awarii były bardziej czytelne? W jaki sposób?Podaj nazwę wątku doładowania?
Odpowiedz
Musisz uzyskać dostęp do podstawowej operacji podstawowej wątku i przypisać nazwę w sposób zależny od systemu. Debugowanie i dzienniki awarii są z natury zależne od systemu, a funkcja boost :: thread jest bardziej niezależna od systemu, tzn. Dotyczy przenośności.
Wygląda na to (http://www.boost.org/doc/libs/1_43_0/doc/html/thread.html), że nie ma udokumentowanego sposobu uzyskania dostępu do zasobów systemowych dla wątku doładowania. (Ale ja nigdy go stosować się więc mogę coś przeoczyć.)
Edycja: (Jak Dawid pisze w komentarzu) http://www.boost.org/doc/libs/1_43_0/doc/html/thread/thread_management.html#thread.thread_management.thread.nativehandle
używam impuls 1.50.0 na Win32 + VS2010 i thread::native_handle
zawiera numer którego nie udało mi się sparować z niczym w systemie. Z drugiej strony metoda thread::get_id()
zwraca bezpośrednio identyfikator wątku systemu Windows w postaci ciągu szesnastkowego. Zwróć uwagę, że zwrócona wartość zależy od platformy. Poniższy kod działa w Boost 1.50.0 + Win32 + VS2010. Ponownego użycia części kodu z 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);
}
Wezwania tak:
boost::thread* thr = new boost::thread(boost::bind(...));
SetThreadName(thr->get_id(), "MyName");
Brakuje struktury 'THREADNAME_INFO' i' MS_VC_EXCEPTION'. Czy nie ma lepszego sposobu na uzyskanie numeru z boost :: thread :: id? eek. – David
Przepraszam za to, nie mam pojęcia, jak to się stało, powinien być już kompletny. Jeśli chodzi o numer wątku - nie wiem. Boost docs mówią, że nie ma żadnego sposobu na ... – Odin
możesz uzyskać identyfikator wątku, przekazując GetThreadId (w
- 1. Dołącz do określonego wątku doładowania
- 2. Używanie wątku doładowania i niestanowiącej klasy funkcji
- 3. Kiedy odłączyć lub dołączyć do wątku doładowania?
- 4. Spanie wątku doładowania przez kilka nanosekund
- 5. PHP: Podaj nazwę tablicy obiektów JSON?
- 6. Podaj drugą nazwę zmiennej w javascript
- 7. Podaj nazwę dla kroków konstrukcyjnych - konfiguracja Jenkinsa
- 8. Jak uzyskać nazwę wątku Win32?
- 9. Wyświetl nazwę wątku zamiast nazwy wątku w logu
- 10. wget podaj nazwę pobranego pliku i nie ma innego pliku
- 11. Podaj nazwę pliku aplikacji OSX dla aplikacji Eclipse RCP
- 12. gdb jak wyświetlić wyświetlaną nazwę wątku
- 13. Jak poprawnie uzyskać nazwę wątku w Javie?
- 14. Podaj wyjątek, czy nie?
- 15. Podaj katalog instalacji klejnotów
- 16. Podaj argumenty Cipher.getInstance()?
- 17. Podaj typ dla ArrayList
- 18. Rozszerzanie serializacji doładowania
- 19. doładowania powiązanie nie
- 20. Łączenie bibliotek doładowania
- 21. Podsumowanie podciągów doładowania dopasowanie
- 22. Budowanie podzbioru bibliotek doładowania
- 23. Prawidłowe stosowanie doładowania lambda
- 24. doładowania awaria współprogram twierdzenie
- 25. Wizualizacja wykresu (wykres doładowania)
- 26. doładowania błąd wiążą kompilacja
- 27. Jak sprawić, by element członkowski klasy działał jak funkcja wątku za pomocą doładowania
- 28. Jak używać zmiennej warunku doładowania w celu oczekiwania na zakończenie przetwarzania wątku?
- 29. Podaj poprawną ścieżkę do pamięci podręcznej.
- 30. Podaj argumenty konstruktora dla testu Google Fixture
+1, 'boost :: thread' ma' metody native_handle' który może być używany do pobierania natywnego API uchwyt wątek. Będziesz musiał zagłębić się w bibliotece wątków, aby dowiedzieć się, jaki jest konkretny typ, który zwraca i dokumentacji API, w jaki sposób używać tego uchwytu, aby nadać mu nazwę ... –
Dla systemu Linux: http://stackoverflow.com/questions/778085/how-to-name-a-thread-in-linux – moala
Dla Windows: http://stackoverflow.com/questions/905876/how-to-set-name-to-a-win32-thread – moala