简单的GObject程序-入门

2024-05-02 10:08
文章标签 简单 程序 入门 gobject

本文主要是介绍简单的GObject程序-入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了看看GObject的构造析构问题做的一个简单的程序,话不多说:

文件结构:glib_books.h glib_books.c glib_test1.c Makefile

 

//定义了一个books的类

//glib_books.h

#ifndef _GLIB_BOOKS_H_
#define _GLIB_BOOKS_H_

#include <glib-object.h>

#define M_TYPE_BOOKS (m_books_get_type ())
#define M_BOOKS(object) \
    G_TYPE_CHECK_INSTANCE_CAST ((object), M_TYPE_BOOKS, MBooks)
#define M_IS_BOOKS(object) \
    G_TYPE_CHECK_INSTANCE_TYPE ((object), M_TYPE_BOOKS))
#define M_BOOKS_CLASS(klass) \
    (G_TYPE_CHECK_CLASS_CAST ((klass), M_TYPE_BOOKS, MBooksClass))
#define M_IS_BOOKS_CLASS(klass) \
    (G_TYPE_CHECK_CLASS_TYPE ((klass), M_TYPE_BOOKS))
#define M_BOOKS_GET_CLASS(object) \
    (G_TYPE_INSTANCE_GET_CLASS ((object), M_TYPE_BOOKS, MBooksClass))

typedef struct _MBooks MBooks;

struct _MBooks {
    GObject parent;
};

typedef struct _MBooksClass MBooksClass;

struct _MBooksClass {
    GObjectClass parent_class;
};

GType m_books_get_type (void);

#endif

//books的实现

//glib_books.c

/*
 * glib_books.c
 *
 *  Created on: Nov 19, 2012
 *      Author: szhu
 */

#include "glib_books.h"

//G_DEFINE_TYPE (MBooks, m_books, G_TYPE_OBJECT);
static void m_books_dispose(GObject *object);
static void m_books_finalize(GObject *object);


static void     m_books_init              (MBooks        *self);
static void     m_books_class_init        (MBooksClass *klass);
static gpointer m_books_parent_class = ((void*) 0);
static void     m_books_class_intern_init (gpointer klass)
{
  m_books_parent_class = g_type_class_peek_parent (klass);
  m_books_class_init ((MBooksClass*) klass);
}

GType
m_books_get_type (void)
{
  static volatile gsize g_define_type_id__volatile = 0;
  if (g_once_init_enter (&g_define_type_id__volatile))
    {
      GType g_define_type_id =
        g_type_register_static_simple (((GType) ((20) << (2))),
                                       g_intern_static_string ("MBooks"),
                                       sizeof (MBooksClass),
                                       (GClassInitFunc) m_books_class_intern_init,
                                       sizeof (MBooks),
                                       (GInstanceInitFunc) m_books_init,
                                       (GTypeFlags) 0);
      { {{};} }
      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
    }
  return g_define_type_id__volatile;
}

static
void m_books_class_init (MBooksClass *klass){
    g_printf("%s\n", __FUNCTION__);

//    g_type_class_add_private (klass, sizeof (MyFilePrivate));

    GObjectClass *base_class = G_OBJECT_CLASS (klass);
    base_class->dispose      = m_books_dispose;
    base_class->finalize     = m_books_finalize;
}

static
void m_books_init (MBooks *self){
    g_printf("%s\n", __FUNCTION__);
}

static
void m_books_dispose(GObject *object){
    g_printf("%s\n", __FUNCTION__);
}

static
void m_books_finalize(GObject *object){
    g_printf("%s\n", __FUNCTION__);
}

 

//glib_test1.c

/*
 * glib_test1.c
 *
 *  Created on: Nov 19, 2012
 *      Author: szhu
 */

#include <glib.h>
#include "glib_books.h"

int main(int argc, char* argv[]){
    g_type_init ();

    int i;
    MBooks* books[10];

    int len = sizeof(books) / sizeof(books[0]);
    g_printf("len=%d\n", len);


    for(i = 0; i < len; i++){
        g_printf("    >>construction books[%d]\n", i);
        books[i]= g_object_new(M_TYPE_BOOKS, NULL);
    }

    for(i = 0; i < len; i++){
        g_printf("     >>destruction books[%d]\n", i);
        g_object_unref(books[i]);
    }
    return 0;
}

 

//Makefile

CC = gcc
CC_OPTS = $(shell pkg-config --cflags gobject-2.0)
CC_OPTS += -std=c99 -g
LD_OPTS = $(shell pkg-config --libs gobject-2.0)


glib_test:glib_test.o glib_books.o
$(CC) -o $@ $+ $(LD_OPTS)


%.o:%.c
$(CC) $(CC_OPTS) -c -o $@ $<
 
clean:
rm -rf *.o glib_test

 

这篇关于简单的GObject程序-入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954010

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3