简单的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

相关文章

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

SpringBoot整合Apache Spark实现一个简单的数据分析功能

《SpringBoot整合ApacheSpark实现一个简单的数据分析功能》ApacheSpark是一个开源的大数据处理框架,它提供了丰富的功能和API,用于分布式数据处理、数据分析和机器学习等任务... 目录第一步、添加android依赖第二步、编写配置类第三步、编写控制类启动项目并测试总结ApacheS

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

Mysql 驱动程序的程序小结

《Mysql驱动程序的程序小结》MySQL驱动程序是连接应用程序与MySQL数据库的重要组件,根据不同的编程语言和应用场景,MySQL提供了多种驱动程序,下面就来详细的了解一下驱动程序,感兴趣的可以... 目录一、mysql 驱动程序的概念二、常见的 MySQL 驱动程序1. MySQL Connector

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

MySQL索引踩坑合集从入门到精通

《MySQL索引踩坑合集从入门到精通》本文详细介绍了MySQL索引的使用,包括索引的类型、创建、使用、优化技巧及最佳实践,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录mysql索引完整教程:从入门到入土(附实战踩坑指南)一、索引是什么?为什么需要它?1.1 什么