glib如何使用g_main_loop_new来创建主进程
时间: 2023-11-28 11:05:54 浏览: 190
进程的创建
`g_main_loop_new()` 函数可以用来创建一个新的主循环,主循环可以用于事件处理和异步任务的调度。下面是一个简单的示例程序,展示如何使用 `g_main_loop_new()` 函数创建一个主进程:
```c
#include <glib.h>
static gboolean on_timeout(gpointer data)
{
g_print("Hello, world!\n");
return G_SOURCE_CONTINUE;
}
int main(int argc, char** argv)
{
GMainLoop* loop = g_main_loop_new(NULL, FALSE);
guint timeout_id = g_timeout_add_seconds(1, on_timeout, NULL);
g_print("Starting main loop...\n");
g_main_loop_run(loop);
g_source_remove(timeout_id);
g_main_loop_unref(loop);
return 0;
}
```
以上代码创建了一个主循环,并注册了一个每秒调用一次的定时器事件。`g_main_loop_run()` 函数会启动主循环,并一直运行,直到调用 `g_main_loop_quit()` 函数停止循环。在这个例子中,调用 `g_main_loop_quit()` 函数需要在 `SIGINT` 信号处理函数中执行:
```c
static void on_sigint(int signum)
{
g_print("Received SIGINT, stopping main loop...\n");
g_main_loop_quit(loop);
}
int main(int argc, char** argv)
{
// ...
signal(SIGINT, on_sigint);
// ...
}
```
这样,当用户在终端中按下 `Ctrl+C` 键时,就会触发 `SIGINT` 信号,程序会执行 `on_sigint()` 函数,从而停止主循环。
阅读全文