Tôi biết về quy trình không trực quan để đặt tên của chuỗi trong Windows (xem "How to set name to a Win32 Thread?"). Có cách nào để lấy tên của chủ đề không? Tôi không thấy bất kỳ API Windows nào cho phép tôi thực hiện việc này (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx).Làm cách nào để lấy tên của Chủ đề Win32?
Trả lời
Không có cuộc gọi WinAPI như vậy vì không tồn tại những thứ như tên chuỗi.
Nếu bạn đặt tên chuỗi thì trình gỡ lỗi của IDE sẽ lưu trữ cho bạn, điều này giúp bạn gỡ lỗi dễ dàng hơn. Tuy nhiên, tên này không bao giờ thực sự được gắn vào luồng bằng một lệnh gọi API Windows.
Nếu bạn chạy ứng dụng của mình mà không có trình gỡ lỗi thì việc đặt tên chuỗi không có hiệu lực, do đó bạn không thể truy xuất tên.
Thậm chí nếu nó có thể truy cập được - tôi sẽ không viết mã chỉ hoạt động với trình gỡ rối được đính kèm. Lưu tên tốt hơn cho chính bạn cùng với tay cầm.
bạn đang nói rằng hoàn toàn không có cách nào để có được tên chủ đề mà bạn đã đặt trong trình gỡ rối? Tôi muốn đặt một số kiểm tra lỗi trong mã của tôi để đảm bảo nó được gọi từ đúng chuỗi, sử dụng tên luồng – Arthur
Chủ đề 0x66c đã thoát với mã 0 (0x0) -> Tôi nghĩ, có lẽ 0x66c giống như một cái tên ? – Andre
Chủ đề không thực sự có tên trong Win32. Quá trình thông qua RaiseException
chỉ là một "Bắt tay bí mật" với trình gỡ lỗi VS, người thực sự lưu trữ ánh xạ TID => Tên. Bản thân Windows không có khái niệm "Tên".
Bắt đầu với Windows 10, phiên bản 1607, giờ đây bạn có thể lấy tên của chuỗi bằng cách sử dụng GetThreadDescription()
, giả sử SetThreadDescription()
được sử dụng để đặt tên của chuỗi.
Dưới đây là một ví dụ:
HRESULT hr = GetThreadDescription(ThreadHandle, &data);
if (SUCCEEDED(hr))
{
wprintf(“%ls\m”, data);
LocalFree(data);
}
Đây là tài liệu hướng dẫn:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt774972(v=vs.85).aspx
- 1. Làm thế nào để đặt tên cho một chủ đề Win32?
- 2. Cách tạo chủ đề bằng Win32 API?
- 3. Cách lấy tên chủ đề hiện tại trong Magento
- 4. Tomcat-Jaas - Làm thế nào để lấy chủ đề?
- 5. chủ đề mingw-w64: posix vs win32
- 6. Làm cách nào để lấy tên chủ sở hữu của tệp trong Linux bằng C++?
- 7. Làm cách nào để lấy tên của chủ sở hữu tệp trong Java trên OSX?
- 8. Chủ đề của Win32 Registry có an toàn không?
- 9. Win32 Lập kế hoạch chủ đề
- 10. Làm cách nào để lấy tên của hằng số?
- 11. Làm cách nào để lấy tên hàm?
- 12. Tên của chủ đề trong ThreadPool - C#
- 13. OpenSSL Lấy tên thay thế chủ đề từ chứng chỉ
- 14. Trên Win32 làm thế nào để bạn di chuyển một chủ đề đến một lõi CPU?
- 15. Cách lấy ID chủ đề Android?
- 16. Cách lấy dấu vết ngăn xếp của một chủ đề
- 17. Làm cách nào để phân tích cú pháp Tên chủ đề thay thế từ X509Certificate2?
- 18. C# - làm cách nào tôi có thể lấy tên của chủ sở hữu cho một Mutex
- 19. Cách lấy tên máy chủ từ UNC
- 20. gdb cách hiển thị tên chủ đề
- 21. Với ThreadPoolExecutor, làm cách nào để lấy tên của chuỗi đang chạy trong nhóm luồng?
- 22. Làm cách nào để tự động lấy các khai báo API Win32 trong C#?
- 23. Chủ đề Asp.Net MVC, làm cách nào?
- 24. Làm cách nào để lấy thư mục gốc của ứng dụng máy chủ ASP.NET của tôi?
- 25. Win32: Làm thế nào để có được quy trình/chủ sở hữu một mutex?
- 26. Làm cách nào để lấy tên chương trình trong Racket?
- 27. Làm cách nào để lấy tên localhost trong PowerShell?
- 28. Làm cách nào để thay đổi chủ đề Eclipse?
- 29. Nhận chủ đề theo tên
- 30. Làm cách nào để tạo một nhóm chủ đề?
Bạn có thể lấy tên hàm bắt đầu của chủ đề nếu điều đó giúp bạn trong bất kỳ cách nào. – Nawaz
@Nawaz Bạn sẽ làm như thế nào? –
@CS .: Bạn đã sử dụng các API sau: [SymInitialize] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms681351%28v=vs.85%29.aspx) và [SymFromAddr] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms681323%28v=vs.85%29.aspx). Tôi đã sử dụng chúng, xem chủ đề này: [Nhận StartAddress của chuỗi win32 từ một quá trình khác] (http://stackoverflow.com/questions/8679406/get-startaddress-of-win32-thread-from-another-process) – Nawaz