【问题标题】:Can I have multiple GMainContext per GMainLoop?每个 GMainLoop 可以有多个 GMainContext 吗?
【发布时间】:2020-08-13 18:13:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: glib


    【解决方案1】:

    当我添加两个 GMainContext 时,GMainLoop 会是什么样子。

    每个GMainLoop 只能有一个GMainContextGMainLoop 的核心只是:

    while (!main_loop_quit_called)
      g_main_context_iteration (loop->context, TRUE);
    

    但是有人可以验证添加 GMainContext 不会创建线程。它只是为另一组 Gsource 添加了另一个事件循环。

    正确。您必须手动创建线程。

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

    您不能将两个GMainContexts 附加到一个GMainLoop,因为您不能在阻止另一个GMainContext 时迭代一个GMainContext。每个GMainContext 都归结为一个poll() 调用,您不能让其中两个同时在同一个线程中运行。

    “线程默认上下文”的概念只是存在,因此操作不必都将GMainContext * 作为参数。

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

    这个问题非常模糊和开放式。请说明您要达到的目标。

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

    如果你真的需要第二个线程(通常是you don’t),它应该正好有一个GMainContext

    the guidelines on main contexts

    【讨论】:

    • 感谢您的解释。正如您所提到的,我不能在单个线程中有多个 GMainContext 。这解释了我需要知道的一切。
    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 2020-07-07
    • 2011-07-20
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多