【问题标题】:Event queue cleanup事件队列清理
【发布时间】:2019-10-23 09:07:31
【问题描述】:

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

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

这是正确的做法吗?

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

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

【问题讨论】:

    标签: c asynchronous tcl eventqueue


    【解决方案1】:

    关于第一点,我觉得这没问题。这很像在 TCL 级别运行update

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 2021-04-12
      相关资源
      最近更新 更多