Multithreading con C++ e MFC

La libreria Microsoft Foundation Class (MFC) fornisce il supporto per le applicazioni multithreading. In questo argomento vengono descritti i processi e i thread e l'approccio MFC al multithreading.

Un processo è un'istanza in esecuzione di un'applicazione. Ad esempio, quando si fa doppio clic sull'icona del Blocco note, si avvia un processo che esegue blocco note.

Un thread è un percorso di esecuzione all'interno di un processo. Quando si avvia Blocco note, il sistema operativo crea un processo e inizia l'esecuzione del thread primario di tale processo. Quando questo thread termina, esegue il processo. Questo thread primario viene fornito al sistema operativo dal codice di avvio sotto forma di indirizzo di funzione. In genere, è l'indirizzo della main funzione o WinMain fornita.

Se necessario, è possibile creare thread aggiuntivi nell'applicazione. È possibile eseguire questa operazione per gestire le attività in background o di manutenzione quando non si vuole che l'utente attenda il completamento. Tutti i thread nelle applicazioni MFC sono rappresentati da oggetti CWinThread . Nella maggior parte dei casi, non è nemmeno necessario creare in modo esplicito questi oggetti; Chiamare invece la funzione helper del framework AfxBeginThread, che crea automaticamente l'oggetto CWinThread .

MFC distingue due tipi di thread: thread dell'interfaccia utente e thread di lavoro. I thread dell'interfaccia utente vengono comunemente usati per gestire l'input dell'utente e rispondere a eventi e messaggi generati dall'utente. I thread di lavoro vengono comunemente usati per completare le attività, ad esempio il ricalcolo, che non richiedono l'input dell'utente. L'API Win32 non distingue tra i tipi di thread; deve solo conoscere l'indirizzo iniziale del thread in modo che possa iniziare a eseguire il thread. MFC gestisce i thread dell'interfaccia utente specificando un message pump per gli eventi nell'interfaccia utente. CWinApp è un esempio di un oggetto thread dell'interfaccia utente, perché deriva da CWinThread e gestisce eventi e messaggi generati dall'utente.

Prestare particolare attenzione alle situazioni in cui più thread potrebbero richiedere l'accesso allo stesso oggetto. Multithreading: i suggerimenti per la programmazione descrivono le tecniche che è possibile usare per risolvere i problemi che possono verificarsi in queste situazioni. Multithreading: come usare le classi di sincronizzazione descrive come usare le classi disponibili per sincronizzare l'accesso da più thread a un singolo oggetto.

La scrittura e il debug della programmazione multithreading sono intrinsecamente un'impresa complessa e complessa, perché è necessario assicurarsi che gli oggetti non siano accessibili da più thread alla volta. Gli argomenti relativi al multithreading non insegnano le nozioni di base della programmazione multithreading, ma solo come usare MFC nel programma multithreading. Gli esempi MFC multithreading inclusi in Visual C++ illustrano alcune API di aggiunta multithreading e Win32 non incluse in MFC; tuttavia, sono destinati solo a essere un punto di partenza.

Per altre informazioni su come il sistema operativo gestisce processi e thread, vedere Processi e thread in Windows SDK.

Per altre informazioni sul supporto del multithreading MFC, vedere gli argomenti seguenti:

Vedi anche

Supporto del multithreading per il codice precedente (Visual C++)