Wiem o nieintuicyjnym procesie ustawiania nazwy wątku pod Windows (zobacz "How to set name to a Win32 Thread?"). Czy istnieje sposób na uzyskanie nazwy wątku? Nie widzę żadnego interfejsu Windows API, który pozwala mi to zrobić (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx).Jak uzyskać nazwę wątku Win32?
Odpowiedz
Nie ma takiego wywołania WinAPI, ponieważ nie istnieje coś takiego jak nazwy wątków.
Jeśli ustawisz nazwę wątku, to debugger Twojego IDE zapamięta go dla ciebie, co ułatwia debugowanie. Jednak nazwa nigdy nie jest dołączona do wątku przez wywołanie interfejsu API systemu Windows.
Jeśli uruchomisz aplikację bez debuggera, ustawienie nazwy wątku nie przyniesie efektu, dlatego nie możesz pobrać nazwy.
Nawet jeśli byłby dostępny - nie napisałbym kodu, który działa tylko z dołączonym debuggerem. Lepiej przechowuj nazwę dla siebie wraz z uchwytem.
czy mówisz, że nie ma absolutnie żadnego sposobu na uzyskanie nazwy wątku, który ustawiłeś w debugerze? Chciałbym umieścić kod debugowania w moim kodzie, aby upewnić się, że jest wywoływany z właściwego wątku, używając nazwy wątku – Arthur
Wątek 0x66c zakończył kod 0 (0x0) -> Pomyślałem, że może 0x66c jest coś takiego imię ? – Andre
Wątki w rzeczywistości nie mają nazw w Win32. Proces przez RaiseException
jest po prostu "tajnym uzgadnianiem" z VS Debugger, który faktycznie przechowuje TID => Mapowanie nazw. Sam system Windows nie ma pojęcia o wątku "Nazwa".
Począwszy od wersji systemu Windows 10, 1607, można teraz uzyskać nazwę wątku, używając GetThreadDescription()
, zakładając SetThreadDescription()
została wykorzystana, aby ustawić nazwę wątku.
Oto przykład:
HRESULT hr = GetThreadDescription(ThreadHandle, &data);
if (SUCCEEDED(hr))
{
wprintf(“%ls\m”, data);
LocalFree(data);
}
Oto dokumentacja:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt774972(v=vs.85).aspx
- 1. Jak poprawnie uzyskać nazwę wątku w Javie?
- 2. Podaj nazwę wątku doładowania?
- 3. gdb jak wyświetlić wyświetlaną nazwę wątku
- 4. Wyświetl nazwę wątku zamiast nazwy wątku w logu
- 5. Jak uzyskać nazwę funkcji?
- 6. Jak uzyskać nazwę System.Xml.Linq.XNode?
- 7. Jak uzyskać liczbę cykli procesora w Win32?
- 8. Jak uzyskać identyfikator wątku jądra?
- 9. Jak uzyskać silną nazwę zespołu?
- 10. Jak uzyskać nazwę bieżącej funkcji?
- 11. jak uzyskać nazwę tabeli Magento
- 12. Jak uzyskać tymczasową nazwę pliku?
- 13. Jak uzyskać nazwę pliku DLL?
- 14. Jak uzyskać nazwę otwartego pliku?
- 15. Jak uzyskać nazwę/opis wyjątku?
- 16. Jak uzyskać nazwę urządzenia iPhone'a:
- 17. Jak uzyskać pełną nazwę typu?
- 18. Regex: Jak uzyskać nazwę grupy
- 19. Jak uzyskać poprzednią nazwę tagu?
- 20. Jak uzyskać zlokalizowaną nazwę CFBundleDisplayName
- 21. Jak uzyskać nazwę procesu aplikacji?
- 22. Jak uzyskać wartość zwracaną wątku systemu Windows?
- 23. Jak uzyskać identyfikator wątku w C#
- 24. Jak uzyskać identyfikator wątku z dowolnego pthread_t?
- 25. jak uzyskać nazwę pliku wywołującego, nazwę metody w pytonie
- 26. Jak uzyskać nazwę użytkownika/wyświetlaną nazwę w BuddyPress?
- 27. Interfejs API win32 win32 api
- 28. jak zapisać plik z GetSaveFileName w win32?
- 29. Jak uzyskać "angielską nazwę" dla postaci?
- 30. Jak uzyskać nazwę dnia od wybranej daty?
Można uzyskać nazwę funkcji początek wątku, jeśli który pomaga Ci w jakikolwiek sposób. – Nawaz
@Nawaz Jak byś to zrobił? –
@CS .: Musisz używać tych interfejsów API: [SymInitialize] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms681351%28v=vs.85%29.aspx) i [SymFromAddr] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms681323%28v=vs.85%29.aspx). Użyłem ich, zobacz ten temat: [Get StartAddress wątku Win32 z innego procesu] (http://stackoverflow.com/questions/8679406/get-startaddress-of-win32-thread-from-another-process) – Nawaz