c - 事件队列清理
问题描述
在我的 Tcl 扩展中,辅助线程正在用事件填充 Tcl 事件队列;这些事件包含指向具有动态生命周期的结构的指针。
什么是确保没有带有指向已释放结构的悬空指针的事件留在事件队列中的正确策略?我可以阻止辅助线程创建新事件;目前我Tcl_DoOneEvent(TCL_DONTWAIT)
在确保不能创建新事件和取消分配结构之前调用一个循环,直到它返回 0(即事件队列为空)。
这是正确的方法吗?
在相关说明中,我不确定的目的Tcl_ThreadAlert()
:如果每次调用后都需要这样做Tcl_ThreadQueueEvent()
,为什么不包含警报Tcl_ThreadQueueEvent()
?
最后,我的代码没有调用Tcl_CreateEventSource()
,因为它似乎不需要设置或检查过程,因为涉及第二个线程。这值得担心吗?
解决方案
在第一点上,这对我来说似乎没问题。这很像update
在 TCL 级别上运行。
我不确定第二点,因为它不是我探索过很多的 API 的一部分。这可能是允许每个通知安排多个事件的方式,或者因为呼叫还有其他用途,但我真的不知道。
第三点,听起来不错。我认为您永远不需要特殊的事件源来进行线程间消息传递。
推荐阅读
- java - 无法将数据插入mysql表
- netlogo - NetLogo:当条件满足时设置代理的方向。如果代理在城市,则有 60% 的机会离开
- npm - 无法初始化 TypeORM 项目
- php - codeigniter中的ajax请求返回html代码而不是重定向
- imagemagick - ImageMagick 命令行提取 Gimp 输入的元数据信息
- python - 在python中重新排序列表,所以偶数首先出现
- plsql - 我如何显示用户名的数据(具有相同的角色) - APEX
- javascript - jQuery 将多维表单数据发送到 PHP 脚本
- python - H2O - 从 python 代码中获取交叉验证结果
- python - pandas:根据列中的排名修改字符串值