Что такое Дескриптор События?

CSS не предлагает никакую подобную вещь. Единственное решение состоит в том, чтобы записать сценарий предварительной обработки, который или выполняется вручную для создания статического вывода CSS на основе некоторого динамического псевдо-CSS, или это сцепляется до веб-сервера и предварительно обрабатывает CSS до отправки его клиенту.

6
задан Mick 17 November 2009 в 17:38
поделиться

6 ответов

Сколько из этих утекших дескрипторов вы видите?

События создаются неявно критическими секциями (см. InitializeCriticalSection и др.) И, возможно, некоторыми другими Элементы Win32, которые я сейчас не могу вспомнить. Кроме того, они могут быть созданы фреймворком, который вы используете (если есть), например MFC, или библиотеками, которые вы используете.

Чтобы отследить утечку, вы можете использовать точку останова только для печати. Войдите в функцию CreateEvent (используя представление сборки) и установите точку останова на ее первой инструкции. Затем щелкните точку останова правой кнопкой мыши, выберите «При попадании ...» и отредактируйте параметры, чтобы он не нарушал работу отладчика, а выводил некоторую полезную информацию (например, см. Макрос $ CALLER). Затем запустите приложение ... и будьте готовы увидеть ОГРОМНЫЙ журнал. Если есть настоящая утечка, вы увидите повторяющийся узор в журнале,

2
ответ дан 17 December 2019 в 04:48
поделиться

Как уже упоминалось другими людьми, CreateEvent / CreateEventEx используются для создания дескрипторов событий. Они представляют собой объекты синхронизации, которые часто используются для доступа к воротам, предоставляют сигналы (потенциально) другим потокам, а также могут использоваться в качестве основы для блокировок.

Если вы пытаетесь отладить утечку, включающую дескрипторы событий, вам следует попробуйте поискать места, где CreateEvent (Ex) вызывается без соответствующего CloseHandle (). В зависимости от того, какие фреймворки вы использовали для получения событий, вы также можете обнаружить, что они могут просто отсутствовать при очистке, если они являются членами другого объекта / структуры (например, что-то, что имеет общую переменную-член HANDLE, которая пропускается при очистке, или указатель на HANDLE и т. д.).

Если вы не помните, что создавали эти объекты в своем собственном коде, возможно, вам не хватает аналогичного метода Close () или другого метода очистки в другом классе или провайдере, который использует их внутренне. Обычно здесь подозреваются вещи, которые выполняют фоновую обработку, сигнализацию или предоставляют методы ожидания завершения операций.

Создание обработчиков событий
Функция CreateEvent @ MSDN
Функция CreateEventEx @ MSDN

Обработчики очистки
] Функция CloseHandle @ MSDN

1
ответ дан 17 December 2019 в 04:48
поделиться

Если вы не знаете, какие библиотеки DLL или сторонние компоненты вызывают CreateEvent или CreateEventEx, используйте Dependency Walker, чтобы узнать, что импортирует каждая DLL:

http: //www.dependencywalker. com / (это бесплатно)

Это, по крайней мере, поможет сузить проблему до определенного набора взаимодействий - тогда вам нужно будет просмотреть все вызовы этой библиотеки и убедиться, что все очищено правильно вверх.

1
ответ дан 17 December 2019 в 04:48
поделиться

Даже если вы не создаете события напрямую, операционная система или другой код библиотеки, безусловно, может и будет. Возможно, вы захотите посмотреть на возможность того, что ваше приложение открывает / создает какой-то другой ресурс, который не очищается. Возможно, вы действительно пропускаете что-то еще, но эта штука приносит с собой объект события.

Это может помочь установить точку останова отладчика в CreateEvent (и друзьях), чтобы увидеть, что его создает, но я не удивлюсь, если это будет происходить достаточно часто, чтобы ваша проблема потерялась среди шума.

1
ответ дан 17 December 2019 в 04:48
поделиться

Насколько мне известно, почти единственные вещи, которые создают событие, - это CreateEvent и CreateEventEx. Несколько других функций могут возвращать дескриптор события (например, WaitForMultipleObjects), но это дескриптор, который вы создали и передали ему ранее.

Изменить: поскольку ваш код явно не создает событие напрямую, вы можете захотеть для начала использовать обходные пути для просмотра вызовов CreateEvent (Ex) и проследить стек, чтобы увидеть, какая часть вашего кода вызывает их создание и что вызывает их создание.

0
ответ дан 17 December 2019 в 04:48
поделиться

Следующая ссылка должна помочь вам начать работу: http://msdn.microsoft.com/en-us/library/ms682655 (VS.85) .aspx

CreateEvent и CreateEventEx будут создавать события и возвращать им дескрипторы.

0
ответ дан 17 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: