Un oggetto della classe CCriticalSection rappresenta una "sezione critica" — un oggetto di sincronizzazione che permette un thread alla volta per accedere a una risorsa o una sezione di codice. Sezioni critiche sono utili quando un solo thread alla volta può essere permesso di modificare dati o qualche altra risorsa controllata. Ad esempio, l'aggiunta di nodi a un elenco collegato è un processo che dovrebbe essere consentito solo da un thread alla volta. Utilizzando un oggetto CCriticalSection per controllare l'elenco collegato, un solo thread alla volta può ottenere l'accesso all'elenco.
Sezioni critiche vengono utilizzate invece di mutex quando la velocità è fondamentale e la risorsa non verrà utilizzata oltre i limiti del processo. Per ulteriori informazioni sull'utilizzo di mutex in MFC, vedere CMutex.
Per utilizzare un oggetto CCriticalSection , costruire l'oggetto CCriticalSection quando è necessario. Si può quindi accedere alla sezione critica quando termina il costruttore. Chiamare Unlock quando si è fatto l'accesso alla sezione critica.
Per accedere a una risorsa controllata da un oggetto CCriticalSection in questo modo, prima di creare una variabile di tipo CSingleLock nella funzione di membro accesso della risorsa. Quindi chiamare la funzione di membro dell'oggetto lock Lock (ad esempio, CSingleLock::Lock). A questo punto, il thread sarà o accedere alla risorsa, attendere per essere rilasciato e ottenere l'accesso o aspettare la risorsa per essere rilasciato e time out, non riuscendo a ottenere l'accesso alla risorsa della risorsa. In ogni caso, la vostra risorsa ha avuto accesso in modo thread-safe. Per rilasciare la risorsa, utilizzare la funzione di membro dell'oggetto blocco Unlock (ad esempio, CSingleLock::Unlock) o consentire all'oggetto di serratura a cadere fuori dell'ambito.
In alternativa, è possibile creare un oggetto CCriticalSection stand-alone e accedervi in modo esplicito prima di tentare di accedere alla risorsa controllata. Questo metodo, mentre più chiara a qualcuno di leggere il codice sorgente, è più incline all'errore, come si deve ricordare bloccare e sbloccare la sezione critica prima e dopo l'accesso.
Per ulteriori informazioni sull'utilizzo di oggetti CCriticalSection , vedere l'articolo Multithreading: come utilizzare le classi di sincronizzazione nel manuale del programmatore di Visual C++.
# include lt;afxmt.h>
Membri della classe |nbsp; Classe base | Gerarchia Chart
Campio&nenbsp; Esempio MFC MTGDI
Vedere a&nchenbsp;CMutex