Multithreading: creazione di thread dell'interfaccia utente MFC

Un thread dell'interfaccia utente viene comunemente usato per gestire l'input dell'utente e rispondere agli eventi utente indipendentemente dai thread che eseguono altre parti dell'applicazione. Il thread dell'applicazione principale (fornito nella CWinAppclasse derivata da ) è già stato creato e avviato automaticamente. In questo argomento vengono descritti i passaggi necessari per creare thread aggiuntivi dell'interfaccia utente.

La prima cosa da fare quando si crea un thread dell'interfaccia utente è derivare una classe da CWinThread. È necessario dichiarare e implementare questa classe usando le macro DECLARE_DYNCREATE e IMPLEMENT_DYNCREATE . Questa classe deve eseguire l'override di alcune funzioni e può eseguire l'override di altre. Queste funzioni e le operazioni da eseguire vengono presentate nella tabella seguente.

Funzioni di cui eseguire l'override durante la creazione di un thread dell'interfaccia utente

Funzione Scopo
ExitInstance Eseguire la pulizia al termine del thread. In genere sottoposto a override.
InitInstance Eseguire l'inizializzazione dell'istanza del thread. Deve essere sottoposto a override.
OnIdle Eseguire l'elaborazione inattiva specifica del thread. In genere non sottoposto a override.
PreTranslateMessage Filtrare i messaggi prima che vengano inviati a TranslateMessage e DispatchMessage. In genere non sottoposto a override.
ProcessWndProcException Intercettare le eccezioni non gestite generate dai gestori di messaggi e comandi del thread. In genere non sottoposto a override.
Run Funzione di controllo per il thread. Contiene il message pump. Raramente sottoposto a override.

MFC fornisce due versioni di AfxBeginThread tramite l'overload di parametri: una che può creare solo thread di lavoro e una che può creare thread di lavoro o thread di interfaccia utente. Per avviare il thread dell'interfaccia utente, chiamare il secondo overload di AfxBeginThread, fornendo le informazioni seguenti:

  • Il RUNTIME_CLASS della classe derivata da CWinThread.

  • (Facoltativo) Livello di priorità desiderato. Il valore predefinito è la priorità normale. Per altre informazioni sui livelli di priorità disponibili, vedere SetThreadPriority in Windows SDK.

  • (Facoltativo) Dimensioni dello stack desiderate per il thread. Il valore predefinito è lo stesso stack di dimensioni del thread di creazione.

  • (Facoltativo) CREATE_SUSPENDED se si desidera che il thread venga creato in uno stato sospeso. Il valore predefinito è 0 o avviare normalmente il thread.

  • (Facoltativo) Attributi di sicurezza desiderati. Il valore predefinito è lo stesso accesso del thread padre. Per altre informazioni sul formato di queste informazioni di sicurezza, vedere SECURITY_ATTRIBUTES in Windows SDK.

AfxBeginThread fa la maggior parte del lavoro per te. Crea un nuovo oggetto della classe, lo inizializza con le informazioni fornite e chiama CWinThread::CreateThread per avviare l'esecuzione del thread. I controlli vengono eseguiti in tutta la procedura per assicurarsi che tutti gli oggetti vengano deallocati correttamente in caso di esito negativo di qualsiasi parte della creazione.

Scegliere l'argomento su cui visualizzare maggiori informazioni

Vedi anche

Multithreading con C++ e MFC