重要的本机扩展将需要每个解释器的数据
动态分配的结构。
我目前正在使用Tcl_SetAssocData,有一个对应的密钥
扩展名和适当的删除例程,
以防止此内存泄漏。
然而,Tcl_PkgProvideEx 也允许记录这样的
信息。该信息可以通过以下方式检索
Tcl_PkgRequireEx。关联扩展的数据结构
其包装看起来比“抓包”更自然
关联数据;然而 Pkg*Ex 例程不提供
自动调用删除例程。所以我想我需要
继续使用 AssocData 方法。
Pkg*Ex 例程是为哪些情况设计的?
此外,Tcl 库允许安装
ExitHandler 和 ThreadExitHandler。改相
手动,用于将缓冲区刷新到磁盘等。
还有其他情况需要使用 ExitHandlers 吗?
当Tcl调用exit时,Tcl_PackageUnloadProcs被调用吗?
整个扩展 ClientData 适用于想要发布自己的存根表(即表示精确 ABI 的有组织的函数列表)的扩展other扩展可以构建。这是一件非常罕见的事情。如果您不想要它,请保留 NULL(如果您需要,请直接联系 Tcl 核心开发人员的邮件列表;我们在这方面有相当多的经验)。由于它是针对ABI结构的,所以它是strongly预计是纯静态数据,因此不需要删除。动态数据应通过不同的机制发送(例如,通过 Tcl 解释器或通过 ABI 调用函数)。
退出处理程序(可以在多个级别注册)是当您必须在适当的时间删除某些资源时使用的东西。典型的兴趣点是当口译员(aTcl_Interp
结构)正在被删除,当一个线程被删除时,以及当整个进程消失时。哪些资源需要专门删除?嗯,通常很明显:文件句柄、数据库句柄等等。笼统地回答是很尴尬的,因为细节非常重要:提出更具体的问题以获得量身定制的建议。
但是,包卸载回调仅在响应unload
命令。与包加载回调一样,它们使用“特殊函数符号”注册,如果它们不存在,则unload
命令将拒绝卸载包。大多数软件包不使用它们。用例是存在非常长生命周期的进程,需要添加额外的可升级功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)