我试图理解当我致电g_source_new
时的含义。最新的API文档(此时为2.38.2)on the call只是说:
创建一个新的GSource结构。指定大小以允许创建从GSource派生的包含其他数据的结构。传入的大小必须至少为sizeof(GSource)。
我试图了解调用此API是否意味着我正在实例化GSource
的新实例,或者是否打算注册新的GSource
类型。
基本问题是:我是否允许使用GSource
创建一个新的g_source_new
,然后将其应用于任意数量的上下文(通过g_source_attach
)?或者,即使尝试将我已定义的GSource
应用于多个上下文,我是否必须同时使用这两个函数?
答案 0 :(得分:4)
从源定义看起来,您只能将GSource附加到一个GMainContext
struct _GSource
{
/*< private >*/
gpointer callback_data;
GSourceCallbackFuncs *callback_funcs;
const GSourceFuncs *source_funcs;
guint ref_count;
GMainContext *context; // <<<<<
gint priority;
guint flags;
guint source_id;
GSList *poll_fds;
GSource *prev;
GSource *next;
char *name;
GSourcePrivate *priv;
};
看看
static guint
g_source_attach_unlocked (GSource *source,
GMainContext *context,
gboolean do_wakeup)
会告诉您只会关联相关的GMainContext
。
派生GSource
用法示例:https://github.com/chergert/iris/blob/master/iris/iris-gsource.c