TX Library Help – Version: 00173a, Revision: 173
|
Класс для автоматической блокировки и разблокировки критической секции. Подробнее...
Открытые члены | |
txAutoLock (CRITICAL_SECTION *cs, bool mandatory=true) | |
Конструктор, блокирует критическую секцию | |
txAutoLock (bool mandatory=true) | |
Конструктор для блокировки холста TXLib. | |
~txAutoLock () | |
Деструктор, разблокирует секцию | |
operator bool () const | |
Позволяет проверить, заблокировалась секция или нет | |
Открытые атрибуты | |
CRITICAL_SECTION * | cs_ |
Блокируемая критическая секция | |
Закрытые члены | |
txAutoLock (const this_t &) _tx_delete | |
Такой вот копирайт. |
Класс для автоматической блокировки и разблокировки критической секции.
Начиная с Александреску, его пишут все и он прост, как пробка: в конструкторе -- EnterCriticalSection(), в деструкторе -- LeaveCriticalSection(). Это RAII
в чистом виде: вы никогда не забудете разблочить секцию and your thread show will always go on.
Некоторые добавления: есть возможность вызвать TryEnterCriticalSection(), и, если она не заблочила секцию, деструктор ее не разблочивает. Есть оператор для проверки, заблочилась ли секция или нет (см. конструкторы класса и оператор bool
).
txAutoLock | ( | CRITICAL_SECTION * | cs, |
bool | mandatory = true |
||
) | [explicit] |
Конструктор, блокирует критическую секцию
cs | Критическая секция для блокировки. |
mandatory | Если true , то блокировать обязательно (EnterCriticalSection). Если false , то только пытаться блокировать (TryEnterCriticalSection). Если не указано, то блокировка обязательна. |
CRITICAL_SECTION cs = {}; // This is not a Counter Strike void foo() { txAutoLock lock (&cs); // Здесь вызовется EnterCriticalSection() ... } // а здесь LeaveCriticalsection() void bar() { txAutoLock lock (&cs, false); // TryEnterCriticalSection() if (!lock) return; // ну не смогла ... }
txAutoLock | ( | bool | mandatory = true | ) | [explicit] |
Конструктор для блокировки холста TXLib.
mandatory | Если true , то блокировать обязательно, как в txLock (true). Если false , то только пытаться блокировать, как в txLock (false). Если не указано, то блокировка обязательна. |
void foobar() { txAutoLock lock; // Здесь вызовется txLock() ... } // а здесь txUnlock()
operator bool | ( | ) | const |