Целое расширение ClientData предназначено для расширений, которые хотят опубликовать свою собственную таблицу-заглушку (т. Е. Организованный список функций, представляющих точный ABI), с которыми другие расширения могут быть построены. Это очень редкая вещь, которую хочется делать; оставьте на NULL, если вы этого не хотите (и обратитесь напрямую к списку рассылки разработчиков ядра Tcl; у нас есть небольшой опыт в этой области). Так как он предназначен для структуры ABI, он сильно должен быть чисто статическим и поэтому не нуждается в удалении. Динамические данные должны отправляться через другой механизм (например, через интерпретатор Tcl или через вызов функций через ABI).
Обработчики выхода (которые могут быть зарегистрированы на нескольких уровнях) - это то, что вы используете, когда вам нужно удалить какой-то ресурс в соответствующее время. Типичные моменты, представляющие интерес, - это когда интерпретатор (структура Tcl_Interp
) удаляется, когда удаляется поток и когда весь процесс удаляется. Какие ресурсы нужно специально удалить? Ну, это обычно очевидно: дескрипторы файлов, дескрипторы баз данных и тому подобное. Вообще неловко отвечать, поскольку детали очень важны: задайте более конкретный вопрос, чтобы получить индивидуальный совет.
Однако обратные вызовы выгрузки пакетов вызываются только в ответ на команду unload
. Как и обратные вызовы загрузки пакета, они используют регистрацию «символа специальной функции», и если они отсутствуют, команда unload
откажется выгружать пакет. Большинство пакетов не используют их. В этом случае используются очень долгоживущие процессы, которым необходимо добавить дополнительные обновляемые функции.