Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как проверить, проинициализирована ли критическая секция ?
|
|||
|---|---|---|---|
|
#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, 12:53 |
|
||
|
как проверить, проинициализирована ли критическая секция ?
|
|||
|---|---|---|---|
|
#18+
zxc15 Как проверить было ли вызвано InitializeCriticalSection, что бы выполнить DeleteCriticalSection или нет ? Если вызвать DeleteCriticalSection без инициализации, то выскакивает исключение что-то про invalid handle. На сколько я помню, таких возможностей нет. Ты должен сам в программе помнить, вызывался ли InitializeCriticalSection. Можно завести отдельный дополнительный флаг. Можно при создании каждый раз обнулять (заполнять нулями) структуру критической секции, и проверять на это впоследствии. можно (лучше всего) создать простой объект С++-врапер над критической секцией и в его конструкторе всегда её инициализировать, а в деструкторе удалять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2015, 13:22 |
|
||
|
как проверить, проинициализирована ли критическая секция ?
|
|||
|---|---|---|---|
|
#18+
zxc15, напиши класс который в конструкторе вызывает InitializeCriticalSection, а в деструкторе DeleteCriticalSection. Тогда достаточно будет объявить переменную внутри try и после выхода из области видимиости деструктор будет вызван автоматически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2015, 13:23 |
|
||
|
как проверить, проинициализирована ли критическая секция ?
|
|||
|---|---|---|---|
|
#18+
MasterZivzxc15 Как проверить было ли вызвано InitializeCriticalSection, что бы выполнить DeleteCriticalSection или нет ? Если вызвать DeleteCriticalSection без инициализации, то выскакивает исключение что-то про invalid handle. На сколько я помню, таких возможностей нет. Ты должен сам в программе помнить, вызывался ли InitializeCriticalSection. Можно завести отдельный дополнительный флаг. Можно при создании каждый раз обнулять (заполнять нулями) структуру критической секции, и проверять на это впоследствии. можно (лучше всего) создать простой объект С++-врапер над критической секцией и в его конструкторе всегда её инициализировать, а в деструкторе удалять. Спасибо. Тоже смотрю, что нигде в документациях про это ничего не написано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2015, 13:26 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39097216&tid=2018760]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 120ms |

| 0 / 0 |
