Шаг 332 - MFC и синхронизация

Для решения подобных задач в MFC есть несколько классов, а точнее 6. Вот они:

CSyncObject
CSemaphore
CMutex
CCriticalSection 
CEvent
CSingleLock 
CMultiLock 

CSyncObject использовать нельзя, т.к. он является базовым классом. Все функции доступа можно разделить на две категории.

Важно уметь определять тот класс, который нужен для работы. Давайте посмотрим логику для синхронизации работы.

Если приложение должно ждать некоторого события перед получением доступа, то нам нужен CEvent.

Если к объекту будут иметь доступ несколько потоков из одного приложения и нужны ограничения по количеству, тогда нам нужен CSemaphore.

Будет ли объект использоваться несколькими приложениями ? Если да, то CMutex, иначе CCriticalSection.

С синхронизацией доступа все. Если нужен конроль за одним ресурсом, то CSingleLock, иначе CMultiLock.

Давайте расмотрим приложение, которое, например, показывает схему города. Нам нужно обеспечить совместную работу. Активным может быть только одно окно. Внесли изменение и при переключении в другое окно изменения сохраняются. Допустим, что в этих окна три вида - План города, Вид в перспективе, Вид в плане детального масштаба. Первая задача ограничить количество окон. Для этого можно использовать CSemaphore, которым задаем максимальное количество окон. Для разрешения вносить изменения только из одного окна используем класс CCriticalSection. Класс CEvent будет извещать о событиях. Для работы с документом где будут храниться данные нам будет нужнен класс CSingleLock.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 1.05.2001