删除GSourcetimeout并将相同的GSource添加到相同的上下文中,而无需重新创建源

问题描述

有2个线程。线程“ A”是管理器,线程“ B”是工作器。 我在“ B”中创建了GmainContext。然后,我添加了一个超时源并将其附加到“ B”中的GMainContext。

线程A启动。它工作了一段时间,并且想要从“ B”中删除超时源。一段时间后,它需要将相同的源(可能具有相同的源ID)添加回GMainContext中“ B”的相同上下文中。

我认为这是有可能的,但是我不知道要执行什么。

这是我尝试过的。

static GMainLoop* _mainLoop;
static GMainLoop* _taskThreadLoop;

static gboolean _toTaskThread(void* /*data*/)
{
    printf("TaskThread\r\n");
    return true;
}

static gboolean _toMain(void* /*data*/)
{
    printf("Main Thread\r\n");
    return true;
}

void* taskThreadMain(void* /*data*/)
{
    GMainContext *context = g_main_context_new();
    g_main_context_push_thread_default(context);

    _taskThreadLoop = g_main_loop_new(context,FALSE);
    GSource* toSource = g_timeout_source_new(5000);

    g_source_set_callback(toSource,_toTaskThread,nullptr,nullptr);
    g_source_attach(toSource,context);

    // Run the loop on taskThread
    g_main_loop_run(_taskThreadLoop);

    // Destroy all the resources used in this thread
    g_source_destroy(toSource);
    g_main_loop_unref(_taskThreadLoop);
    g_main_context_unref(context);

    return nullptr;
}

int main()
{
    _mainLoop = g_main_loop_new(nullptr,true);
    g_timeout_add(2000,_toMain,nullptr);

    GThread* taskThread = g_thread_new("thread",taskThreadMain,nullptr);

    g_main_loop_run(_mainLoop);

    if (_mainLoop)
    {
        g_main_loop_unref(_mainLoop);
        g_main_loop_quit(_taskThreadLoop);
    }

    g_thread_join(taskThread);
    g_thread_unref(taskThread);

    return EXIT_SUCCESS;
}

我应该在main()中做什么,以便删除taskThread中的源以及如何将其重新添加。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

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