问题描述
当我添加两个GMainContext时,GMainLoop的外观如何。该文档不清楚。但是有人可以验证添加GMainContext不会创建线程。只是为另一组Gsource添加了另一个事件循环。
当GMainLoop附加2个上下文时,将优先考虑哪个GMainContext。我假设它是线程默认上下文,但是只是想确保。
如果有人还可以举一个例子说明为什么有人可能需要两个GMainContext而不是仅将Gsource添加到第一个上下文中。
基本上,我刚开始使用GMain东西,并且我有一个带有GmainContext的GMainLoop所有设置。但是我想在另一个线程上添加一些空闲任务,但是我是应该创建一个新线程还是只是创建一个新的GMainContext感到困惑。
解决方法
当我添加两个GMainContext时,GMainLoop的外观如何。
每个GMainContext
只能有一个GMainLoop
。 GMainLoop
的核心只是:
while (!main_loop_quit_called)
g_main_context_iteration (loop->context,TRUE);
但是有人可以验证添加GMainContext不会创建线程。只是为另一组Gsource添加了另一个事件循环。
正确。您必须手动创建线程。
当GMainLoop附加2个上下文时,将优先考虑哪个GMainContext。我假设它是线程默认上下文,但是只是想确保。
您不能在一个GMainContext
上附加两个GMainLoop
,因为您不能在阻塞另一个GMainContext
的同时对其进行迭代。每个GMainContext
都归结为一个poll()
调用,您不能让其中两个在同一线程中同时运行。
仅存在“线程默认上下文”的概念,因此操作不必全部使用GMainContext *
作为参数。
如果有人还可以举一个例子说明为什么有人可能需要两个GMainContext而不是仅将Gsource添加到第一个上下文中。
这个问题非常模糊和开放。请说明您要达到的目标。
基本上,我刚开始使用GMain东西,并且我有一个带有GmainContext的GMainLoop所有设置。但是我想在另一个线程上添加一些空闲任务,但是我是应该创建一个新线程还是只是创建一个新的GMainContext感到困惑。
如果您确实需要第二个线程(通常是you don’t),则它应该恰好有一个GMainContext
。