我开始研究 Glib 信号。在我的场景中,我想将一个类的多个实例连接到一个信号,如果这些实例之一调用 g_signal_emit(...),则应该为该类的所有实例调用提供的回调函数。让我尝试用一个例子来解释这一点。
\n\n我尝试创建 A 类的两个实例(A0 和 A1)。\nA 类在其_class_init函数中注册了一个非常简单的信号。
\n\n file_signals[0] = g_signal_newv("a_signal",\n G_TYPE_FROM_CLASS(ACLASS),\n G_SIGNAL_ACTION,\n NULL /* closure */,\n NULL /* accumulator */,\n NULL /* accumulator data */,\n NULL /* C marshaller */,\n G_TYPE_NONE /* return_type */,\n 0 /* n_params */,\n NULL); /* argument types*/\nRun Code Online (Sandbox Code Playgroud)\n\n然后,我将实例 A0 和 A1 的简单回调函数 (cb_a) 连接到信号“a_signal”。(例如在_instance_init函数中)
\n\ng_signal_connect(A0, "a_signal", (GCallback)cb_a, NULL);\ng_signal_connect(A1, "a_signal", (GCallback)cb_a, NULL); ,\nRun Code Online (Sandbox Code Playgroud)\n\n其中 cb_a 是 Ac 中定义的函数:
\n\nstatic void cb_a(void)\n{\nprintf("cb_a called!\\");\n}\nRun Code Online (Sandbox Code Playgroud)\n\n …