glib如何使用g_main_loop_new来创建主进程,并创建一个子线程,子线程中打印123后退出。
时间: 2024-03-18 14:42:16 浏览: 87
下面是一个示例程序,展示如何使用 `g_main_loop_new()` 函数创建主进程,并创建一个子线程,子线程中打印 `123` 并退出。
```c
#include <glib.h>
#include <stdio.h>
static gpointer thread_func(gpointer data)
{
g_print("In the thread...\n");
g_usleep(1000000);
g_print("123\n");
return NULL;
}
int main(int argc, char** argv)
{
GThread* thread;
GMainLoop* loop = g_main_loop_new(NULL, FALSE);
g_print("Creating the thread...\n");
thread = g_thread_new("my-thread", thread_func, NULL);
g_print("Starting main loop...\n");
g_main_loop_run(loop);
g_print("Waiting for the thread to finish...\n");
g_thread_join(thread);
g_main_loop_unref(loop);
return 0;
}
```
以上代码创建了一个名为 `my-thread` 的子线程,子线程中打印 `123` 并等待 1 秒钟后退出。主线程中创建了一个主循环,并启动主循环,直到调用 `g_main_loop_quit()` 函数停止循环。当主线程收到停止循环的信号时,等待子线程退出后返回。
需要注意的是,在使用 GLib 时,建议使用 GLib 提供的线程 API,而不是直接使用系统的线程 API。在本例中,可以使用 `g_thread_new()` 函数创建一个新的线程,使用 `g_thread_join()` 函数等待线程退出。这样可以保证线程和主循环之间的同步和安全。
阅读全文