每个GMainLoop是否可以有多个GMainContext?

问题描述

当我添加两个GMainContext时,GMainLoop的外观如何。该文档不清楚。但是有人可以验证添加GMainContext不会创建线程。只是为另一组Gsource添加了另一个事件循环。

当GMainLoop附加2个上下文时,将优先考虑哪个GMainContext。我假设它是线程默认上下文,但是只是想确保。

如果有人还可以举一个例子说明为什么有人可能需要两个GMainContext而不是仅将Gsource添加到第一个上下文中。

基本上,我刚开始使用GMain东西,并且我有一个带有GmainContext的GMainLoop所有设置。但是我想在另一个线程上添加一些空闲任务,但是我是应该创建一个新线程还是只是创建一个新的GMainContext感到困惑。

解决方法

当我添加两个GMainContext时,GMainLoop的外观如何。

每个GMainContext只能有一个GMainLoopGMainLoop的核心只是:

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

请参见the guidelines on main contexts

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...