Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
07.11.2015, 12:53
|
|||
|---|---|---|---|
|
|||
как проверить, проинициализирована ли критическая секция ? |
|||
|
#18+
Часто бывает необходимо проинициализировать или создать кучу объектов в одном блоке, например в конструкторе какого-либо класса и не только. Такие как, события, мьютексы, потоки, критические секции и т.д. Теперь представим, что по ходу инициализации где-то вылезла ошибка и сработало исключение. В обработчике исключения я хочу подчистить за собой и удалить всё, что успел создать до возникновения ошибки. Если с указателями и HANDLE особых проблем нет и перед удалением их можно просто проверить на NULL или nullptr, то как быть с критическими секциями ? Как проверить было ли вызвано InitializeCriticalSection, что бы выполнить DeleteCriticalSection или нет ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Если вызвать DeleteCriticalSection без инициализации, то выскакивает исключение что-то про invalid handle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2015, 13:22
|
|||
|---|---|---|---|
как проверить, проинициализирована ли критическая секция ? |
|||
|
#18+
zxc15 Как проверить было ли вызвано InitializeCriticalSection, что бы выполнить DeleteCriticalSection или нет ? Если вызвать DeleteCriticalSection без инициализации, то выскакивает исключение что-то про invalid handle. На сколько я помню, таких возможностей нет. Ты должен сам в программе помнить, вызывался ли InitializeCriticalSection. Можно завести отдельный дополнительный флаг. Можно при создании каждый раз обнулять (заполнять нулями) структуру критической секции, и проверять на это впоследствии. можно (лучше всего) создать простой объект С++-врапер над критической секцией и в его конструкторе всегда её инициализировать, а в деструкторе удалять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2015, 13:23
|
|||
|---|---|---|---|
как проверить, проинициализирована ли критическая секция ? |
|||
|
#18+
zxc15, напиши класс который в конструкторе вызывает InitializeCriticalSection, а в деструкторе DeleteCriticalSection. Тогда достаточно будет объявить переменную внутри try и после выхода из области видимиости деструктор будет вызван автоматически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2015, 13:26
|
|||
|---|---|---|---|
|
|||
как проверить, проинициализирована ли критическая секция ? |
|||
|
#18+
MasterZivzxc15 Как проверить было ли вызвано InitializeCriticalSection, что бы выполнить DeleteCriticalSection или нет ? Если вызвать DeleteCriticalSection без инициализации, то выскакивает исключение что-то про invalid handle. На сколько я помню, таких возможностей нет. Ты должен сам в программе помнить, вызывался ли InitializeCriticalSection. Можно завести отдельный дополнительный флаг. Можно при создании каждый раз обнулять (заполнять нулями) структуру критической секции, и проверять на это впоследствии. можно (лучше всего) создать простой объект С++-врапер над критической секцией и в его конструкторе всегда её инициализировать, а в деструкторе удалять. Спасибо. Тоже смотрю, что нигде в документациях про это ничего не написано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2018760]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 164ms |

| 0 / 0 |
