2012-01-24 25 views
5

Próbuję ustalić, czy istnieje lepszy sposób na znalezienie wszystkich identyfikatorów wątku, które należą do bieżącego procesu. Wygląda na to, że użycie CreateToolhelp32Snapshot z TH32CS_SNAPTHREAD i iterowanie przez wątki w celu sprawdzenia, czy identyfikator procesu wątku jest równy bieżącemu identyfikatorowi procesu, jest rozwiązaniem, ale chcę uniknąć iterowania wszystkich uruchomionych wątków. Chcę po prostu powtórzyć wątki, które należą do danego procesu. Daj mi znać, jeśli istnieje interfejs API, który jest szybki i prosty. Muszę to zrobić w C++.Znajdź wszystkie wątki procesu o podanym procesie id

Dzięki, Abhinay.

+1

Wydaje się być zgodne z prawem. Zobacz http://blogs.msdn.com/b/oldnewthing/archive/2006/02/23/537856.aspx – Neil

+2

Przedwczesna optymalizacja, maszyna zazwyczaj nie ma więcej niż 1000 aktywnych wątków. Możesz użyć TH32CS_SNAPALL, aby był selektywny na * th32ProcessID *. –

+0

@Hans: TH32CS_SNAPALL jest opisany jako "Obejmuje wszystkie procesy i wątki w systemie oraz sterty i moduły procesu określone w th32ProcessID" - więc to nie pomoże. –

Odpowiedz

0

Po użyciu funkcji CreateToolhelp32Snapshot z TH32CS_SNAPPROCESS (0x00000002) można uzyskać wątek za pomocą Thread32First function.

Przykładowy kod to here.

1

Jeśli "aktualny proces" jest taki, który napisałeś, możesz skorzystać z tego, że funkcje DllMain są wywoływane za każdym razem, gdy wątek jest dodawany lub kończony kodami przyczyny DLL_THREAD_ATTACH i DLL_THREAD_DETACH. Łatwo jest zachować własną listę.

Powiązane problemy