我怎样才能维持至少一些回调连接信号的顺序?

时间:2017-06-25 00:42:08

标签: python pygobject gobject

当我只使用'connect'时,我无法指定回调中的顺序将被调用。将connect_before和connect_after连接到默认值之前/之后不能满足我的目的。我想要一些像connect_first和connect_last或其他任何东西来帮助我指定回调连接信号的顺序。

这样的东西?

    something.connect_first('my-signal', callback1)
    somethingelse.connect_last('my-signal', callback2)

1 个答案:

答案 0 :(得分:2)

GObject信号只有一个明确的排序保证:

  • 使用g_signal_connect()创建新信号时添加的类闭包将在使用g_signal_connect()
  • 添加所有回调之前调用
  • 创建新信号时添加的类闭包G_SIGNAL_RUN_FIRST将在使用g_signal_connect_after()添加所有回调并使用g_signal_connect()
  • 添加所有回调之后调用

这意味着您只能控制在创建新信号时手动连接所有其他回调之前或之后调用回调 - 原因很明显,因为您可能希望在开始时提供初始状态排放链,或者你想确保排放链末端的稳定状态。

对于使用 SELECT * FROM user_col_comments WHERE comments LIKE '%churn%'; 添加的回调的顺序,没有明确保证任何排序。但是有一个隐含的顺序,连接的顺序,不可能永远改变。请记住,信号处理程序可以安装新的处理程序,或断开它们,或阻止信号发射,因此依赖于特定的顺序通常表明代码中存在设计问题。