Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >运行对象表如何实现弱引用?

运行对象表如何实现弱引用?
EN

Stack Overflow用户
提问于 2016-11-19 09:09:16
回答 1查看 412关注 0票数 1

在运行对象表中注册COM对象时,如果使用零标志(请求弱引用),则ROT会使引用数增加1。从ROT获取对象的行为会使ref计数再增加一次。一旦释放了该对象,则该对象将保持活动状态,其参考数至少为1。它在ROT中的注册也不会在检索时神奇地被撤销。

,那怎么会弱呢?这和强注册有什么不同?

强注册遵循相同的模式-注册和检索都会使引用数增加1。

ROT返回给公寓内客户端的接口指针不是代理;ROT无法知道我已经释放了检索到的接口指针。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-20 05:23:09

实际上,从ROT行为中移除不仅依赖于ROTFLAGS_REGISTRATIONKEEPSALIVE标志,而且还取决于对象实现IExternalConnection的方式。

(特别注意@IInspectable是的,所有这些都是没有文件的,没有支持,可以更改-所以请不要阅读更多)。

当我们在ROT中注册对象时,总是询问他是否有IExternalConnection接口。如果对象未实现,则使用默认实现。

,以防万一, ROTFLAGS_REGISTRATIONKEEPSALIVE已经在注册时IExternalConnection::AddConnection调用了。所以我们已经有了一个外部连接。没有ROTFLAGS_REGISTRATIONKEEPSALIVE -此方法不调用。

每次有人打电话给IRunningObjectTable::GetObject (!(从另一个公寓) CRemoteUnknown::RemAddRef在我们的进程中调用。此方法只在IExternalConnection::AddConnection 注册而没有 ROTFLAGS_REGISTRATIONKEEPSALIVE标志的情况下调用ROTFLAGS_REGISTRATIONKEEPSALIVE

每次我们最终确定Release对象时(!on proxy,从以前的GetObject调用中获得)-在本地进程中调用CRemoteUnknown::RemReleaseWorker。它在内部调用IExternalConnection::ReleaseConnection only,以防对象上的没有 ROTFLAGS_REGISTRATIONKEEPSALIVEIExternalConnection的默认实现称为CStdMarshal::Disconnect -> InternalIrotRevoke,当外部引用(而不是总体对象引用)达到0和fLastReleaseCloses == TRUE时--因此我们的对象被从ROT中撤销。但是,如果我们通过自我实现IExternalConnection,我们可以调用或不调用CoDisconnectObject,这样我们就可以从ROT中被撤销或不被撤销。

最后,当我们直接或间接调用IRunningObjectTable::Revoke com调用IExternalConnection::ReleaseConnection if时,我们向 ROTFLAGS_REGISTRATIONKEEPSALIVE注册

so结论:

如果我们在ROTFLAGS_REGISTRATIONKEEPSALIVE注册-- IExternalConnection::AddConnection将只在注册时被调用一次(实际上可以称为n+1 time和n time - ReleaseConnection ),但这一切都在IRunningObjectTable::Register中。当有人从ROT中得到我们的对象时--我们将不会被通知这件事。最后,当我们调用IExternalConnection::ReleaseConnection时,也只能调用IRunningObjectTable::Revoke一次。

另一方面,如果我们不使用ROTFLAGS_REGISTRATIONKEEPSALIVE标志- IExternalConnection方法将是,而不是在RegisterRevoke上调用。但这将是多次调用 on IRunningObjectTable::GetObject和最终Release (在对象代理上)。如果我们没有自己实现IExternalConnection,或者当外部引用达到0和fLastReleaseCloses时调用CoDisconnectObject,那么我们将被从ROT中删除。但是我们释放了,而不是调用 CoDisconnectObject (在这种情况下,行为将类似于我们使用ROTFLAGS_REGISTRATIONKEEPSALIVE),或者说在某些条件下调用它。

优势-我们可以跟踪每一个我们的对象使用的情况下,如果没有ROTFLAGS_REGISTRATIONKEEPSALIVE标志,并决定由自己是需要断开时,外部参考达到0或不。

最后一个--如果我们从我们调用IRunningObjectTable::Register的同一间公寓调用IRunningObjectTable::Register--我们得到的不是代理,而是直接的对象指针。在这种情况下,当然不会调用IExternalConnection方法

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40695654

复制
相关文章
layui数据表格
https://www.layui.com/doc/modules/table.html
阿超
2022/08/17
1.3K0
layui数据表格
LayUI之旅-数据表格
layui的数据表格是使用频率非常高的组件,在入门篇,我们已经大致了了解了数据表格的方法级渲染,接下来我们深入研究和学习layui-table组件的使用方法。
Yiiven
2022/12/15
4.5K0
Layui 数据表格重载
表格重载可用于刷新表格,筛选表格数据,通过容器的 实例 或 ID 进行表格重载 1. 数据表格容器 <!-- 数据表格容器 --> 2. 使用 数据表格容器的实例 进行表格重载 // 方法渲染 返回当前容器的实例(对象) 3. 使用 数据表格容器的ID 进行表格重载 // 利用容器的ID重载表格
很酷的站长
2023/02/16
7720
Layui 数据表格重载
MySQL数据表格导入导出
结语:数据的具体导入导出格式大家可以自己尝试一下。但个人建议涉及格式转换的话尽量先用其他工具,为防止出错还是尽量只转换纯文本列数据(无特殊格式)。
云海谷天
2022/08/09
3.3K0
Layui数据表格的动态加载
Layui是一个很好的前端框架,很多人都会用到,layui的数据表格这个就是从数据库查询出来的数据渲染到表格上。
PHY_68
2020/10/28
2.8K0
Layui数据表格的动态加载
vue导出excel数据表格功能
前端工作量最多的就是需求,需求就是一直在变,比如当前端数据写完之后,需要用Excel把数据下载出来。
小周sir
2019/09/23
1.7K0
vue导出excel数据表格功能
前端|layui后台管理—table 数据表格
layui是一款采用自身模块规范编写的前端UI框架,遵循原生HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用,非常适合界面的快速开发。layui区别于那些基于MVVM底层的UI框架,不需要各种前端工具的复杂配置,只需面对浏览器本身。
算法与编程之美
2020/05/29
2.2K0
前端|layui后台管理—table 数据表格
Layui数据表格templet的数据无法合计
在使用layui数据表格的时候,有一个列是使用templet,依据其他两个列数据计算得到。
宣言言言
2019/12/15
2.4K0
layui数据表格checkbox设置部分不可选
在layui数据表格中设置了字段为type:checkbox 但是想要实现部分不显示,不可选的功能。
宣言言言
2019/12/17
14K0
使用LayUI操作数据表格「建议收藏」
此时点击查询按钮,会将keyword这个关键字传到后端,接下来就是自己处理查询关键字业务了。
全栈程序员站长
2022/09/20
2.4K0
使用LayUI操作数据表格「建议收藏」
商城项目回顾整理(二)easyUi数据表格使用
后台主页: 商品的数据表格展示 引入用户表数据表格展示 引入日志表数据表格展示 引入订单表数据表格展示 后台主页代码: 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" 3 import="com.hanqi.model.Log,java.net.UnknownHostException,java.net.InetAddress,java.util.*,
二十三年蝉
2018/02/28
1.3K0
layui数据表格自定义每页条数limit设置
table.render({ elem: '#table', url: 'userCenter/userlist', where: { access_token: config.getToken().access_token }, page: true, limits: [100,1000, 2000, 5000], limit: 1000, //每页默认显示的数量 cols: [[ {checkbox: true}, {type: 'number
似水的流年
2020/10/27
2.3K0
vue09动态树+数据表格+分页模糊查
14天阅读挑战赛 努力是为了不平庸~ 目录 1. 准备工作  2. 动态树 2.1 在配置请求路径 2.2 使用动态数据构建导航菜单 2.2.1 通过接口获取数据  2.2.3 通过后台获取的数据构建菜单导航 2.3 点击菜单实现路由跳转 2.3.1 创建书本管理组件 2.3.2 配置路由 2.3.3 修改LeftAside组件 2.3.4 修改Main组件 3. 系统首页配置 4. 表格数据显示 4.1 页面布局 4.2 查询并在表格中显示数据 4.3 实现分页 ---- 1. 准备工作 创建测试数据库
天蝎座的程序媛
2022/11/18
1.2K0
vue09动态树+数据表格+分页模糊查
操作MS Execl电子表格的常用JAR包
支持Excel 95-2000的所有版本;生成Excel 2000标准格式;支持字体、数字、日期操作;能够修饰单元格属性;支持图像和图表。
BUG弄潮儿
2020/12/02
1K0
Apache ECharts 一个开源可商用的数据表格
ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。
KEVINGUO_CN
2020/03/17
2K0
R包reshape2 |轻松实现长、宽数据表格转换
https://seananderson.ca/2013/10/19/reshape/
生信宝典
2019/10/24
12K0
R包reshape2,轻松实现长、宽数据表格转换
本文翻译自外文博客,原文链接:https://seananderson.ca/2013/10/19/reshape/
生信宝典
2018/12/07
8.2K0
R包reshape2,轻松实现长、宽数据表格转换
Layui 数据表格方法渲染中的复杂表头简单使用示例
{ "code": 0, "msg": "用户信息", "count": 5, "data":[ { "id": 1, "name": "张三", "sex": "女", "prov": "河南", "city": "郑州市", "dist": "金水区" }, { "id": 2, "name": "李四", "sex": "男", "prov": "河南", "city": "郑州市", "dist": "金水区" }, { "id": 3, "name": "王五", "sex": "女", "prov": "河南", "city": "郑州市", "dist": "二七区" }, { "id": 4, "name": "赵六", "sex": "女", "prov": "河南", "city": "开封市", "dist": "龙亭区" }, { "id": 5, "name": "小七", "sex": "男", "prov": "河南", "city": "开封市", "dist": "鼓楼区" } ] }
很酷的站长
2023/02/16
2K0
Layui 数据表格方法渲染中的复杂表头简单使用示例
点击加载更多

相似问题

如何在Java中的gzip文件上获得时间戳

13

更改文件Linux上的更改时间戳

10

如何在Linux上向签名的PE文件添加时间戳证书?

39

在Python中设置gzip时间戳

71

保存时间戳和IP地址

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档