当前位置: 首页 > news >正文

惠州 企业网站建设建设工程消防设计备案哪个网站

惠州 企业网站建设,建设工程消防设计备案哪个网站,企业寻找客户有哪些途径,发新闻稿平台接前一篇文章#xff1a;QEMU源码全解析26 —— QOM介绍#xff08;15#xff09; 本文内容参考#xff1a; 《趣谈Linux操作系统》 —— 刘超#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强#xff0c;机械工业出版社 特此致谢#xff01; 前文讲解了对…接前一篇文章QEMU源码全解析26 —— QOM介绍15 本文内容参考 《趣谈Linux操作系统》 —— 刘超极客时间 《QEMU/KVM》源码解析与应用 —— 李强机械工业出版社 特此致谢 前文讲解了对象属性的设置接口。本文讲解对象属性的获取接口。实际上机制是很相似的。 对象属性的设置是通过object_property_get函数来完成的。该函数同样在qom/object.c中代码如下 bool object_property_get(Object *obj, const char *name, Visitor *v,Error **errp) {Error *err NULL;ObjectProperty *prop object_property_find_err(obj, name, errp);if (prop NULL) {return false;}if (!prop-get) {error_setg(errp, QERR_PERMISSION_DENIED);return false;}prop-get(obj, v, name, prop-opaque, err);error_propagate(errp, err);return !err; } 其实object_property_get函数只是简单地调用了ObjectProperty的get函数。 每一种属性类型都有自己的get函数如布尔bool、字符串str、enum枚举等。它们都在qom/object.c中逐个来看 static void property_get_str(Object *obj, Visitor *v, const char *name,void *opaque, Error **errp) {StringProperty *prop opaque;char *value;Error *err NULL;value prop-get(obj, err);if (err) {error_propagate(errp, err);return;}visit_type_str(v, name, value, errp);g_free(value); }static void property_get_enum(Object *obj, Visitor *v, const char *name,void *opaque, Error **errp) {EnumProperty *prop opaque;int value;Error *err NULL;value prop-get(obj, err);if (err) {error_propagate(errp, err);return;}visit_type_enum(v, name, value, prop-lookup, errp); } static void property_get_bool(Object *obj, Visitor *v, const char *name,void *opaque, Error **errp) {BoolProperty *prop opaque;bool value;Error *err NULL;value prop-get(obj, err);if (err) {error_propagate(errp, err);return;}visit_type_bool(v, name, value, errp); }仍以bool为例进行讲解。可以看到property_get_bool函数调用了具体属性BoolProperty的get函数这是在创建这个属性的时候指定的。上一回已经讲过对象属性的添加是通过object_property_add接口完成的。而bool类型对象属性的添加object_property_add_bool函数则是调用了此接口。object_property_add_bool函数在qom/object.c中代码如下 ObjectProperty * object_property_add_bool(Object *obj, const char *name,bool (*get)(Object *, Error **),void (*set)(Object *, bool, Error **)) {BoolProperty *prop g_malloc0(sizeof(*prop));prop-get get;prop-set set;return object_property_add(obj, name, bool,get ? property_get_bool : NULL,set ? property_set_bool : NULL,property_release_data,prop); } 从这个函数中就可以看到BoolProperty结构的set成员函数为调用object_property_add_bool函数时传入的参数形参为void (*get)(Object *, Error **)。在object_property_add_bool函数中调用了上边的property_get_bool函数在property_set_bool函数中最终调用了形参void (*get)(Object *, Error **)对应的实参即真正对象属性的获取函数。 仍以machine为例hw/core/machine.c的machine_initfn函数代码如下 static void machine_initfn(Object *obj) {MachineState *ms MACHINE(obj);MachineClass *mc MACHINE_GET_CLASS(obj);container_get(obj, /peripheral);container_get(obj, /peripheral-anon);ms-dump_guest_core true;ms-mem_merge true;ms-enable_graphics true;ms-kernel_cmdline g_strdup();ms-ram_size mc-default_ram_size;ms-maxram_size mc-default_ram_size;if (mc-nvdimm_supported) {Object *obj OBJECT(ms);ms-nvdimms_state g_new0(NVDIMMState, 1);object_property_add_bool(obj, nvdimm,machine_get_nvdimm, machine_set_nvdimm);object_property_set_description(obj, nvdimm,Set on/off to enable/disable NVDIMM instantiation);object_property_add_str(obj, nvdimm-persistence,machine_get_nvdimm_persistence,machine_set_nvdimm_persistence);object_property_set_description(obj, nvdimm-persistence,Set NVDIMM persistenceValid values are cpu, mem-ctrl);}if (mc-cpu_index_to_instance_props mc-get_default_cpu_node_id) {ms-numa_state g_new0(NumaState, 1);object_property_add_bool(obj, hmat,machine_get_hmat, machine_set_hmat);object_property_set_description(obj, hmat,Set on/off to enable/disable ACPI Heterogeneous Memory Attribute Table (HMAT));}/* default to mc-default_cpus */ms-smp.cpus mc-default_cpus;ms-smp.max_cpus mc-default_cpus;ms-smp.sockets 1;ms-smp.dies 1;ms-smp.clusters 1;ms-smp.cores 1;ms-smp.threads 1;machine_copy_boot_config(ms, (BootConfiguration){ 0 }); } 关注此函数中的以下代码 object_property_add_bool(obj, hmat,machine_get_hmat, machine_set_hmat); 代码中的machine_get_machine函数就是传入object_property_add_bool函数的与形参bool (*get)(Object *, Error **)对应的实参也即对于machine对象属性进行获取时实际调用的函数。 至此 对象的属性的添加、设置和获取就讲解完了。下一回开始讲解类的属性的添加、设置和获取。
http://icebutterfly214.com/news/59730/

相关文章:

  • 深入解析:【AUTOSAR以太网】EthSM简介
  • 2025年靠谱的不锈钢管件厂家最新权威实力榜
  • 2025年口碑好的道路照明工程实力企业榜单
  • 杭州代理记账公司哪家服务好?本地企业真实服务体验参考
  • 苏州交通事故律所推荐:专业法律服务机构选择参考
  • 2025十大AI公司排行榜:技术创新与行业应用观察
  • 上海专业的猎头招聘品牌推荐榜:聚焦优质服务机构
  • 证券公司网上开户推荐哪家?2025年新手选择指南
  • liviv
  • 使用 Enter.pro 生成了一个 PDF水印去除网站的 Landing Page
  • ifconfig linux
  • 专注过程
  • StarBlog小更新,文章管理体验巨大提升,重写了几个管理后台页面
  • 用 C# 和 Tesseract OCR 识别验证码
  • AcWing 906. 区间分组
  • 为什么在虹吸作用下的四五线城市终将越来越衰落?
  • Premium Multidiag TCS CDP+ V2021: Car Truck Diagnostic Tool with Bluetooth + Free Keygen
  • 2025年11月热泵、电锅炉、中央空调推荐榜:商用、养殖、工建场景源头厂家选择指南
  • Linux初级之定时任务
  • A script to set mysql gtid-mode off by tortoise-orm
  • 球坐标系的大运动方程组
  • i2c linux
  • https linux
  • 获深圳人才集团认可!「张张讲AI」AI资讯公众号解读AI动态,讲师提供定制化咨询
  • Unable to add window -- token null is not valid; is your activity running?
  • 20232417 2025-2026-1 《网络与系统攻防技术》实验六实验报告
  • ElasticSearch索引库操作 - 努力-
  • MinIo介绍 - 努力-
  • BLOG1
  • 帮同学签了个到,我发现竟然能盗光他所有账号