2012-07-02 13 views
6

Powiel możliwe:
What are the other threads in a default VCL application, and can they be named by purpose?Co 4 wątki działają pod pustą nową aplikacją formularzy VCL?

Uruchamiając nową pustą VCL Forms Application w Delphi XE2 (32bit), widzę 4 wątki uruchomione w Menedżerze zadań dla tej aplikacji. Oczywiście każda aplikacja wymaga co najmniej jednego wątku, ale w tym przypadku, jakie są pozostałe 3 wątki? Chciałbym lepiej zrozumieć, jakie wątki domyślnie uruchamiają aplikacje formularzy VCL. Pomyślałem, że być może musiał to być fakt, że pracowałem w trybie debugowania z RAD Studio, więc uruchomiłem EXE sam, a także miałem 4 wątki uruchomione. Próbowałem również kompilacji pod "release" config (wyłączając w ten sposób kompilowanie informacji debugowania) i nadal istnieją 4 wątki.

enter image description here

+3

Interesujące, tylko 1 wątek w Delphi XE. – kludg

+1

@RobertFrank nie, nie IDE, program skompilowany przez IDE. Nie będzie to oglądanie sygnatur czasowych plików ani kompilowanie rzeczy w tle. –

+1

Och, moje złe. Właśnie skasowałem mój komentarz i usuwam ten, kiedy usuniesz swój @ do mnie tuż powyżej! :-( – RobertFrank

Odpowiedz

8

Aby ustalić źródło wątków, można sprawdzić adres początkowy gwintu przy użyciu narzędzia jak process explorer lub process hacker.

enter image description here

W tym przypadku, na przykład można zobaczyć

  • NTDLLDLL.dll! TpCallbackIndependent + 0x ????? który jest częścią Windows Threadpool API.
  • ntdll.dll! RtlMoveMemory + 0x ????? to połączenie z funkcją WinAPi RtlMoveMemory.
  • Projekt?. Exe + 0x ????? Główny wątek aplikacji.
+0

Powinieneś również zobaczyć to w IDE, gdy Zatrzymaj debuggera, a następnie otwórz widok "Status wątku" Tam zobaczysz wszystkie wątki, które są obecnie uruchomione. Gdy wykonasz dwukrotne kliknięcie w wątku, zobaczysz stację wywoławczą – Lars

+0

@Lars niestety wygląda na to, że IDE Delphi nie rozwiązuje nazw funkcji wywołujących w stosie wątków, pokazuje tylko adres pamięci. – RRUZ

+0

tak, masz rację, nie miałem żadnego Delphi działającego, kiedy pisałem ten komentarz.Ale tak czy inaczej +1 dla twojego anwser – Lars

5

Na moim komputerze są tworzone wszystkie inne wątki niż główny wątek, ponieważ okno aplikacji zostało zarejestrowane, aby otrzymywać powiadomienia o zmianie sesji za pomocą interfejsu API Wtsapi32.WTSRegisterSessionNotification. Możesz zobaczyć implementację wewnątrz procedury Vcl.Forms -> TApplication.CreateHandle. Musi to mieć związek z działaniem/wyglądem aplikacji podczas logowania za pośrednictwem usług terminalowych/pulpitu zdalnego. Może istnieć kilka innych wątków, ponieważ jakiś inny program załadował kod do twojego pliku wykonywalnego.

+0

Dlaczego aplikacja TApplication rejestruje powiadomienia o zmianie sesji, będzie interesująca wiedzieć – mjn

+1

Służy do wyliczenia ponownie monitorów dostępnych w obiekcie Screen. – pani

Powiązane problemy