2012-07-02 11 views
6

Eventuali duplicati:
What are the other threads in a default VCL application, and can they be named by purpose?Quali 4 thread sono in esecuzione in una nuova applicazione VCL per moduli vuota?

Durante l'esecuzione di un nuovo vuoto VCL Forms Application in Delphi XE2 (32bit), vedo 4 thread in esecuzione nel Task Manager per questa applicazione. Ovviamente ogni app richiede almeno 1 thread, ma in questo caso, quali sono gli altri 3 thread? Mi piacerebbe avere una migliore comprensione di quali thread qualsiasi applicazione di moduli VCL viene eseguita per impostazione predefinita. Ho pensato che forse doveva essere il fatto che stavo correndo in modalità debug da RAD Studio, quindi ho lanciato l'EXE da solo, e aveva anche 4 thread in esecuzione. Ho anche provato a compilare sotto "release" config (disabilitando così la compilazione di informazioni di debug) e ci sono ancora 4 thread.

enter image description here

+3

Interessante, solo 1 thread in Delphi XE. – kludg

+1

@RobertFrank no, non l'IDE, il programma compilato dall'IDE. Non starebbe guardando i timestamp dei file o compilando le cose in background. –

+1

Oh, mio ​​male. Ho appena cancellato il mio commento e lo cancellerò quando cancellerai @ il tuo nome proprio sopra! :-( – RobertFrank

risposta

8

per determinare l'origine dei fili, è possibile controllare l'indirizzo iniziale dei fili utilizzando uno strumento come process explorer o process hacker.

enter image description here

In questo caso, per esempio, è possibile vedere

  • ntdll.dll! TpCallbackIndependent + 0x ????? che fa parte dell'API del threadpool di Windows.
  • ntdll.dll! RtlMoveMemory + 0x ????? è una chiamata alla funzione WinAPi RtlMoveMemory.
  • Progetto ??. Exe + 0x ????? Filetto principale dell'app.
+0

Dovresti anche vederlo nell'IDE quando Metti in pausa il debugger e apri la vista "Thread Status", dove vedi tutti i thread attualmente in esecuzione. Quando fai un doppio click in una discussione, vedi il callstack – Lars

+0

@Lars sfortunatamente l'IDE Delphi sembra non risolvere i nomi delle funzioni di chiamata nello stack thread, mostra solo l'indirizzo di memoria. – RRUZ

+0

sì, hai ragione, non ho avuto Delphi in esecuzione quando ho scritto questo commento.Ma in ogni caso +1 per il tuo anwser – Lars

5

Sul mio computer vengono creati tutti gli altri thread rispetto al thread principale perché la finestra dell'applicazione è stata registrata per ricevere notifiche di modifica della sessione con l'API Wtsapi32.WTSRegisterSessionNotification. Puoi vedere l'implementazione all'interno della procedura Vcl.Forms -> TApplication.CreateHandle. Deve avere a che fare con il modo in cui l'applicazione funziona/sembra quando si accede a Servizi terminal/Desktop remoto. Alcuni altri thread potrebbero esistere perché alcuni altri programmi hanno caricato codice nell'eseguibile.

+0

Perché TApplication registra questa notifica di modifica della sessione sarebbe interessante sapere – mjn

+1

Viene utilizzato per enumerare nuovamente i monitor disponibili in Oggetto schermo. – pani