GLib库对核心应用的支持

2024-06-19 20:12
文章标签 应用 支持 核心 库对 glib

本文主要是介绍GLib库对核心应用的支持,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码:

/** main.c**  Created on: 2024-6-19*      Author: root*/#include <glib.h>							// 包含GLib函数库
static GMutex *mutex = NULL;
static gboolean t1_end = FALSE;				// 用于结束线程1的标志
static gboolean t2_end = FALSE;				// 用于结束线程2的标志
typedef struct _Arg Arg;
struct _Arg
{GMainLoop* loop;						// 该成员为一个GLib实现循环对象gint max;
};
void run_1(Arg *arg)							// 线程1函数
{int i ;for(i=0; i < arg->max; i++) {if(g_mutex_trylock(mutex) == FALSE) {g_print("%d :thread2 lock mutex target\n", i);g_mutex_unlock(mutex);				// 对像解锁}elseg_usleep(10);						// 使线程睡眠10秒}t1_end = TRUE;							// 将该线程结束的标志置为非0
}
void run_2(Arg *arg)							// 线程2函数
{int i;for(i = 0; i < arg->max; i++) {if(g_mutex_trylock(mutex) == FALSE) {g_print("%d :thread1 lock mutex target\n", i);g_mutex_unlock(mutex);				// 对像解锁}elseg_usleep(10);						// 使线程睡眠10秒}t2_end = TRUE;							// 将该线程结束的标志置为非0
}
void run_3(Arg *arg)							// 线程3函数
{for( ; ; ) {								// 建立一个死循环if(t1_end && t2_end) {					// 判断线程1和线程2是否已结束g_main_loop_quit(arg->loop);			// 退出GLib主循环break;}}
}int main()
{GMainLoop *mloop;						// 创建GLib主循环Arg *arg;								// 声明包含指向GLib主循环指针和计数器的结构if(!g_thread_supported())					// 判断是否支持GLib线程g_thread_init(NULL);mloop = g_main_loop_new(NULL, FALSE);		// 开始GLib主循环arg = g_new(Arg, 1);arg->loop = mloop;arg->max = 11;mutex = g_mutex_new();					// 创建一个GMutex对象线程池g_thread_create(run_1, arg, TRUE, NULL);		// 创建线程1g_thread_create(run_2, arg, TRUE, NULL);		// 创建线程2g_thread_create(run_3, arg, TRUE, NULL);		// 创建线程3g_main_loop_run(mloop);					// 运行主循环g_print("thread3exit event cycle\n");g_mutex_free(mutex);						// 释放GMutex对象g_print("release mutex event\n");g_free(arg);								// 清除结构体argg_print("release prar use ram\n");return 0;
}

编译

运行

这篇关于GLib库对核心应用的支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1076029

相关文章

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序