C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 332 - MFC и синхронизация / MFC шаг за шагом / Visual C++

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

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

CSyncObject
CSemaphore
CMutex
CCriticalSection 
CEvent
CSingleLock 
CMultiLock 

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

  • Синхронизация работы
  • Синхронизация доступа (CSingleLock,CMultiLock)

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

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

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

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

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

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


| |
Автор Каев Артем.
[AD]