我使用Gegl来呈现一些输出,并创建一个窗口和GLib来创建一个事件循环。我正在努力解决的问题是,g_main_loop_run()函数永远不会返回(即当我关闭应用程序窗口(或点击Alt+F4)时,它之后的代码根本不会被访问到)。
我编了一个最小的例子:
#include <gegl.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
gegl_init(&argc, &argv);
GeglNode *gegl = gegl_node_new();
GeglNode *text = gegl_node_new_child(gegl,
"operation", "gegl:text",
"size", 100.0,
"color", gegl_color_new ("rgb(1.0,1.0,1.0)"),
"string", "Hello",
NULL);
GeglNode *display = gegl_node_new_child(gegl,
"operation", "gegl:display",
NULL);
gegl_node_link(text, display);
gegl_node_process(display);
GMainLoop *loop = g_main_loop_new(NULL, 0);
printf("before\n");
g_main_loop_run(loop);
// the code from here on never executes
printf("after\n");
g_main_loop_unref(loop);
g_object_unref(gegl);
gegl_exit();
return 0;
}代码行中的printf("after\n");和on永远不会执行。我观察到的另一件事是,当我使用g_timeout_add_seconds()并设置一个调用g_main_loop_quit的回调时,g_main_loop_run正确返回,程序如我预期的那样继续运行。我也尝试过使用gtk_main(),但它的行为是一样的。
我想,问题可能出在一些环境中,我没有传递给GMainLoop,但我在谷歌上或文档中没有找到任何东西……
发布于 2013-08-21 09:26:01
G_main_loop_run(循环);是阻塞调用。通常,它在应用程序的末尾作为主事件循环或在单独的线程中运行。因此,您首先添加源代码,并在最后执行循环运行,以便轮询源代码并执行回调
https://stackoverflow.com/questions/18081106
复制相似问题