2011-02-03 15 views
6

sto probabilmente manca qualcosa di ovvio, ma mi humor ...Come Window Filo di Visual Studio Identificare il "Main Thread'

mi piace sempre di nominare i thread importanti nei miei apps come è utile con il debug/registrazione, ecc. Se si interroga il nome del thread principale tramite Thread.CurrentThread.Name all'avvio del programma, si tornerà a null. Come tale, mi assicuro sempre che la prima cosa che accade sia che il thread principale (e qualsiasi altro thread rilevante) venga assegnato a un elemento significativo nome per riferimento futuro

Non ci ho mai pensato molto fino ad oggi, ma guardando la finestra Threads in Visual Studio (prima che vengano assegnati nomi di thread ed ecc.), una categoria speciale 'Main Thread' è assegnata così come un nome psuedo che legge anche "Main Thread" (ma questo non è il nome del thread effettivo).

Da una prospettiva gestita, .NET non espone nulla di significativo su System.Threading.Thread o System.Diagnostics.ProcessThread che identifica il thread principale di un'applicazione (almeno che potrei vedere). Ho guardato l'elenco di Windows Process and Thread Functions, e di nuovo, non ho visto nulla di ovvio (forse OpenThread?).

Curioso se qualcuno sa come la finestra Thread assegna la categoria speciale "Main Thread"?

risposta

5

Il debugger avvia il debug con CreateProcess utilizzando l'opzione DEBUG_PROCESS. L'handle del thread principale viene restituito in PROCESS_INFORMATION.hThread, quindi non ci sono ipotesi. Allegare è un po 'più complicato, presumibilmente la prima notifica CREATE_THREAD_DEBUG_EVENT che vede da WaitForDebugEvent dopo il collegamento con DebugActiveProcess().

Il source code per MDbg è disponibile se si desidera dare un'occhiata più da vicino.

+0

Ah, questo ha senso; grazie per le informazioni. Il codice sorgente è decisamente interessante. –

+0

Le notifiche CREATE_THREAD_DEBUG_EVENT sono asincrone. Non sono sicuro che l'ordine di consegna sia garantito. Le informazioni restituite da CreateProcess hanno senso, però. –

Problemi correlati