2012-07-02 14 views
6

Duplicar posible:
What are the other threads in a default VCL application, and can they be named by purpose?¿Qué 4 subprocesos se están ejecutando en una nueva aplicación de formularios VCL vacía?

Cuando se ejecuta una nueva aplicación de formularios VCL vacío en Delphi XE2 (32 bits), veo 4 subprocesos que se ejecutan en el Administrador de tareas para esta aplicación. Obviamente, cualquier aplicación requiere al menos 1 hilo, pero en este caso, ¿cuáles son los otros 3 hilos? Me gustaría tener una mejor comprensión de los hilos que cualquier aplicación de formularios VCL ejecuta de forma predeterminada. Pensé que posiblemente tenía que ser el hecho de que me estaba ejecutando en modo de depuración desde RAD Studio, así que lancé el EXE él mismo, y también tenía 4 subprocesos en ejecución. También intenté compilar en la configuración de "liberación" (deshabilitando así la compilación de la información de depuración) y todavía hay 4 subprocesos.

enter image description here

+3

Interesante, solo 1 hilo en Delphi XE. – kludg

+1

@RobertFrank no, no el IDE, el programa compilado por el IDE. No estaría mirando las marcas de tiempo del archivo ni compilando cosas en segundo plano. –

+1

Oh, mi mal. ¡Simplemente borré mi comentario y lo eliminaré cuando elimines tu @ justo arriba! :-( – RobertFrank

Respuesta

8

para determinar el origen de los hilos, se puede inspeccionar la dirección de inicio de los hilos utilizando una herramienta como process explorer o process hacker.

enter image description here

En este caso, por ejemplo, se puede ver

  • ntdll.dll! TpCallbackIndependent + 0x ????? que es parte de la API de subprocesos de Windows.
  • ntdll.dll! RtlMoveMemory + 0x ????? es una llamada a la función WinAPi RtlMoveMemory.
  • Proyecto ??. Exe + 0x ????? Hilo principal de la aplicación.
+0

También debería ver eso en el IDE cuando pausar el depurador y luego abrir la vista "Estado del subproceso". Allí verá todos los subprocesos que se están ejecutando actualmente. Cuando hace un doble clic en un subproceso, entonces puede ver la pila de llamadas – Lars

+0

@Lars desafortunadamente el Delphi IDE parece que no resuelve los nombres de las funciones de llamada en la pila de hilos, solo muestra la dirección de memoria. – RRUZ

+0

sí, tiene razón, no tenía Delphi ejecutándose cuando escribí este comentario.Pero de todos modos +1 para su guinda – Lars

5

En mi computadora todos los otros hilos que el hilo principal se crean porque la ventana de la aplicación se registró para recibir notificaciones de cambio de sesión con la API Wtsapi32.WTSRegisterSessionNotification. Puede ver la implementación dentro del procedimiento Vcl.Forms -> TApplication.CreateHandle. Debe tener que ver con el funcionamiento y el aspecto de la aplicación cuando inició sesión en Terminal Services/Remote Desktop. Es posible que existan otros subprocesos debido a que algunos otros programas han cargado código en el ejecutable.

+0

¿Por qué TApplication registra esta sesión? Las notificaciones de cambio serían interesantes de conocer – mjn

+1

Se usa para enumerar nuevamente los monitores disponibles en el objeto Pantalla. – pani

Cuestiones relacionadas