首页 > 解决方案 > 事件队列清理

问题描述

在我的 Tcl 扩展中,辅助线程正在用事件填充 Tcl 事件队列;这些事件包含指向具有动态生命周期的结构的指针。

什么是确保没有带有指向已释放结构的悬空指针的事件留在事件队列中的正确策略?我可以阻止辅助线程创建新事件;目前我Tcl_DoOneEvent(TCL_DONTWAIT)在确保不能创建新事件和取消分配结构之前调用一个循环,直到它返回 0(即事件队列为空)。

这是正确的方法吗?

在相关说明中,我不确定的目的Tcl_ThreadAlert():如果每次调用后都需要这样做Tcl_ThreadQueueEvent(),为什么不包含警报Tcl_ThreadQueueEvent()

最后,我的代码没有调用Tcl_CreateEventSource(),因为它似乎不需要设置或检查过程,因为涉及第二个线程。这值得担心吗?

标签: casynchronoustcleventqueue

解决方案


在第一点上,这对我来说似乎没问题。这很像update在 TCL 级别上运行。

我不确定第二点,因为它不是我探索过很多的 API 的一部分。这可能是允许每个通知安排多个事件的方式,或者因为呼叫还有其他用途,但我真的不知道。

第三点,听起来不错。我认为您永远不需要特殊的事件源来进行线程间消息传递。


推荐阅读