흐름
- loop객체와 context객체를 만든다.
- source 객체를 만들고, context객체에 attach한다.
- context를 loop에 넣어서 만든 loop를 이용해서 g_main_loop_run실행
코드
#include <glib.h>
#include <stdio.h>
gboolean timeout_callback(gpointer data)
{
printf("timeout_callback called\n");
return TRUE;
}
static gboolean on_idle(gpointer user_data)
{
//App *app = (App*)user_data;
printf("on_idle called\n");
//return TRUE;
GMainLoop* loop = (GMainLoop*)user_data;
g_main_loop_quit(loop);
return FALSE;
// loop를 리턴하면 반복
}
int main(int argc, char* argv[])
{
GMainLoop* loop = NULL;
GMainContext* context = NULL;
// create timeout_source
GSource* source = NULL;
source = g_timeout_source_new_seconds(2);
// create a context
context = g_main_context_new();
printf("create a context\n");
// attach source to context
int id = g_source_attach(source, context);
printf("attach source to context\n");
GSource* idle_src = g_idle_source_new();
int idle_id = g_source_attach(idle_src, context);
// create main loop
loop = g_main_loop_new(context, FALSE);
printf("create main loop\n");
g_source_set_callback(source, timeout_callback, loop, NULL);
g_source_set_callback(idle_src, on_idle, loop, NULL);
printf("set callback\n");
g_main_loop_run(loop);
printf("loop run\n");
g_main_loop_unref(loop);
return 0;
}
빌드 명령어
g++ -o mainloop_test mainloop_test.cpp `pkg-config --cflags --libs glib-2.0`