2012-01-24 32 views
5

Tôi đang cố gắng tìm nếu có một cách tốt hơn để tìm tất cả các id thread thuộc về quá trình hiện tại. Dường như sử dụng CreateToolhelp32Snapshot với TH32CS_SNAPTHREAD và lặp qua các luồng để kiểm tra xem id tiến trình của luồng có bằng id tiến trình hiện tại hay không, là một giải pháp nhưng tôi muốn tránh lặp lại tất cả các luồng đang chạy. Tôi chỉ muốn lặp qua các chủ đề thuộc về một tiến trình nhất định. Vui lòng cho tôi biết nếu có API nhanh và đơn giản. Tôi cần phải làm điều đó trong c + +.Tìm tất cả các chủ đề của một quá trình cho quá trình id

Xin cảm ơn, Abhinay.

+1

Dường như hợp pháp. Xem http://blogs.msdn.com/b/oldnewthing/archive/2006/02/23/537856.aspx – Neil

+2

Tối ưu hóa sớm, một máy thường không có nhiều hơn 1000 chủ đề đang hoạt động. Bạn có thể sử dụng TH32CS_SNAPALL để làm cho nó có chọn lọc trên * th32ProcessID *. –

+0

@Hans: TH32CS_SNAPALL được mô tả là "Bao gồm tất cả các quy trình và chủ đề trong hệ thống, cộng với heap và mô-đun của quy trình được chỉ định trong th32ProcessID" - vì vậy nó sẽ không giúp đỡ. –

Trả lời

0

Sau khi sử dụng CreateToolhelp32Snapshot với TH32CS_SNAPPROCESS (0x00000002), bạn có thể nhận chuỗi bằng cách sử dụng Thread32First function.

Mã mẫu là here.

1

Nếu "quy trình hiện tại" là một trong những bạn đã viết, bạn có thể tận dụng thực tế rằng các hàm DllMain được gọi bất kỳ lúc nào một chuỗi được thêm vào hoặc chấm dứt bằng các mã lý do DLL_THREAD_ATTACH và DLL_THREAD_DETACH. Thật đơn giản để sau đó giữ danh sách của riêng bạn.

Các vấn đề liên quan