g_main_loop никогда не возвращается
Я использую 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");
и на никогда не выполняет. Еще одна вещь, которую я заметил, что когда я использовал g_timeout_add_seconds()
и установить обратный вызов, который называется g_main_loop_quit
тогда g_main_loop_run
вернул правильно и программа продолжилась как я и ожидал. Я также пытался использовать gtk_main()
, но он вел себя так же.
Я полагаю, проблема будет в том, что мне не удалось перейти на GMainLoop
, но я не нашел ничего ни в Google, ни в документации...
1 ответ
g_main_loop_run(петля); это блокирующий вызов. как правило, он запускается в конце приложения в виде основного цикла событий или в отдельном потоке. поэтому вы сначала добавляете источники и выполняете цикл в конце, чтобы он опрашивал источники и выполнял обратный вызов