Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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. |
| Esegui | 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.