![]() |
TX Library Help – Version: 00173a, Revision: 175
|
Класс для автоматической блокировки и разблокировки критической секции. Подробнее...
Открытые члены | |
| 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 |