2010-06-18 8 views

Odpowiedz

1

to nie tak to działa. Każdy wątek w zarządzanym programie może wykonywać kod zarządzany, w tym te, które zostały pierwotnie uruchomione jako wątek niezarządzany. Większość z nich, główny wątek i każdy wątek wątku rozpoczyna życie, wykonując kod czysto niezarządzalny. Przechodzi w kod zarządzany przez bramę dostarczoną przez Marshal.GetDelegateForFunctionPointer().

Widzenie dziesiątek (w przeciwnym razie nieaktywnych) wątków nie jest niczym niezwykłym. Zazwyczaj są to wątki threadpool i wątki uruchamiane przez serwery COM. W systemie .NET brakuje instalacji hydraulicznej, w której musisz użyć Thread.ManagedThreadId na tych wątkach. To celowy, logiczny wątek .NET nie musi być fizycznym wątkiem systemu operacyjnego. Chociaż obecnie nie ma hosta, gdzie tak nie jest.

Musisz unikać zadawania pytań.

+0

dzięki za poinformowanie mnie. jednak chciałbym mieć odpowiedź. Jak dowiedzieć się, ile wątków zarządzanych zostało utworzonych w moich aplikacjach w dowolnym momencie? –

+0

Tworzysz je, policz je. –

+0

o to chodzi! Używam API 3D party i nie chcę ujawniać szczegółów, może też używać puli wątków lub innego oprogramowania itp. –

1

Nie sprawdziłem, czy jest to możliwe za pomocą interfejsów debugowania, ale ponieważ VS wyświetla zarządzane wątki w debuggerze, powinieneś być w stanie je również pobrać.

W .NET pisanie debuggera jest znacznie łatwiejsze niż można się spodziewać. Implementacja debuggera polega głównie na implementacji interfejsu ICorDebug.

Jest próbka z Microsoft: Managed Debugger Sample