明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 476|回复: 2

[运行时] cad.net 事务栈

[复制链接]
发表于 2025-2-27 16:30:43 | 显示全部楼层 |阅读模式
本帖最后由 你有种再说一遍 于 2025-2-28 01:03 编辑

写着写着事务栈的时候突然发现,
以往对于事务不清晰的地方,都深刻认识了,

那我为什么不写成一个事务呢?

为什么需要写成自己的事务呢?
1,事务崩溃
2,并行任务

因为我已经知道acad是可以串行读取id,
组成List<Entity>后,然后并行读取属性.
这样就只需要tr.GetObject()时候上锁保证串行.
就可以规避掉串行任务期间读取id,意外并行读取的问题.

提交事务如何实现的我也已经做了.
https://www.cnblogs.com/JJBox/p/18703256#_label3_0_2_1

不过我还有一些疑问没解决,
cad内部是怎么实现 undo/redo 的?
我只有知道 undo/redo 我才能后台实现啊,
之前貌似都是前台undo/redo...

难道是维护一个巨大的历史表?
直接删掉图元...貌似也对...
虽然我不知道cad怎么实现,但是这个世界又不是没有开源数据库.
例如Mysql的MVCC原理不是大家都会了吗?
因此按照MVCC做不就得了...

xx

回复

使用道具 举报

 楼主| 发表于 2025-2-27 16:47:16 | 显示全部楼层
青蛙发现了SendMessage本质上不能跨进程使用.

第一个例子是此处,可以看见我们能够发送和操作cad.
https://www.cnblogs.com/JJBox/p/13766772.html

但是我们想解开这个字符串,
1,用子类化拦截窗口过程.
2,用SendMessage发送消息.

在窗口过程函数上面,
同进程可以收到消息和LParam,
但是跨进程收不到LParam,解开就是错误的.

只能还用管道通讯/socket/共享内存了.
https://www.cnblogs.com/JJBox/p/14187031.html

xx

点评

惊佬讲的东西太深奥了,我们小白都看不懂;惊佬有没有录制的视频课啥的,让我们还没接触c#的,入个门的学习学习;然后再若有所思的理解您现在讲的东西  发表于 2025-2-28 09:42
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-3-30 01:10 , Processed in 0.153764 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表