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

数据入队模块的-ExeModule

DataIn.ExeModule()方法解析

这个方法与刚才的 DataOut 是配对的——DataIn 是生产者(往队列写数据),DataOut 是消费者(从队列读数据)。对照着看会更容易理解。


1. 确保队列存在(懒创建)

if(!Solution.Ins.QueueDic.ContainsKey(QueueKey))Solution.Ins.QueueDic[QueueKey]=newJGTechVision.Services.DataOut(QueueKey);

和 DataOut 不同,DataIn不要求队列事先存在——如果全局字典里没有这个 key,就直接创建一个。这样无论哪个模块先运行,队列都能正常工作。


2. 定义槽位结构(只做一次)

if(!_slotsDefined){DefineAllSlots(outQueue);// 根据每个槽位的DataType,创建对应的List<double/int/string/bool>_slotsDefined=true;}

DefineAllSlots遍历所有启用的槽位,根据数据类型调用outQueue.DefineDoubleQueue()/DefineIntQueue()等,在队列内部初始化对应的List<T>。这个操作只执行一次_slotsDefined标志防止重复定义)。


3. 从上游取数据,写入队列

lock(outQueue){foreach(varslotinQueueSlots.Where(s=>s.IsEnable)){objectval=GetLinkValue(slot.LinkVar.Text);// 从上游模块获取值if(val==null)continue;intidx=slot.SlotIndex;switch(slot.DataType){case"double":vardList=(List<double>)outQueue.GetDataQueue(idx);if(dList.Count>=outQueue.LimitLength)dList.RemoveAt(0);// 满了就丢掉最旧的dList.Add(Convert.ToDouble(val));break;// ... int / string / bool 同理}}}

这里的核心逻辑:

  • GetLinkValue(slot.LinkVar.Text)LinkVar.Text存的是类似"&模块名.变量名"的引用字符串,GetLinkValue通过这个引用去上游模块拿到实际值。这是框架的变量链接机制——相当于画一条线把上游模块的输出接到本模块的输入。

  • 环形缓冲区(ring buffer)if (dList.Count >= outQueue.LimitLength) dList.RemoveAt(0)—— 如果队列已满(达到LimitLength上限),就丢掉最旧的那条数据(索引0),然后追加新数据。这保证了队列不会无限增长。


4. 唤醒消费者(关键一步)

if(Solution.Ins.QueueSignDic.ContainsKey(QueueKey))Solution.Ins.QueueSignDic[QueueKey].Set();

这就是和 DataOut 的signal.WaitOne(TimeOut)配对的地方。DataIn 写完数据后调用Set(),把信号量置为有信号状态,这会唤醒正在WaitOne阻塞等待的 DataOut 线程,让它立刻去读取数据。


DataIn vs DataOut 对照

DataIn(入队/生产者)DataOut(出队/消费者)
方向从上游模块拿值 → 写入队列从队列取值 → 暴露为输出参数
数据来源GetLinkValue(LinkVar.Text)变量链接GetSlotValue(outQueue, slot)从队列读
队列满时RemoveAt(0)丢弃最旧数据不适用(只读)
队列空时不关心根据IsWait决定阻塞等待还是报错
信号量signal.Set()唤醒对方signal.WaitOne(TimeOut)等待被唤醒
队列不存在时自动创建报错返回

一句话总结

DataIn 的ExeModule是一个带环形缓冲的生产者:它从上游模块通过变量链接拿到数据,按槽位和类型写入全局队列,写完后发信号唤醒等待中的 DataOut 消费者。队列满时自动丢弃最旧数据,防止内存无限增长。

http://www.jsqmd.com/news/1002866/

相关文章:

  • 5个步骤掌握LaserGRBL:免费开源激光雕刻控制软件终极指南
  • 2026年太原刑事辩护律师推荐怎么选?看这五点关键不踩雷(蓝色河畔推荐) - 本地品牌推荐
  • <p>抚顺的街头巷尾,贵金属回收店铺星罗棋布,从黄金、白银到铂金,各类回收需求日益旺盛。为了帮大家拨云见日,找到真正靠谱的服务商,小编不辞辛劳,精心梳理了一份关于抚顺本地诚信回收店铺的参考指南。以下便
  • Harness 中的会话压缩归档与懒加载
  • 联合嵌入预测架构与拟度量强化学习的能量理论统一
  • 2026年钛板选购指南:专业钛材公司哪家可靠?中国钛谷企业实力评测与行业趋势解读 - 优质品牌商家
  • UIDesign完整解析
  • 作者归属技术与隐私保护:从特征分析到k-匿名实践
  • Java毕设选题推荐:基于 Java 的学生活动报名管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 进化算法讲义:遗传编程、进化编程与差分进化
  • 2026年质量好的山西断桥铝门窗/山西合金断桥铝门窗/山西极窄断桥铝门窗/山西高端断桥铝门窗源头工厂推荐 - 品牌宣传支持者
  • MMD Tools终极指南:在Blender中完美融合MMD工作流
  • 2026年推板机厂家:株洲圆棒推板机/实心料推板机/CNC多工位联动推板送料机专业品牌解析 - 品牌发掘
  • 别再乱接A和B了!手把手教你用MAX485芯片搭建一个稳定可靠的TTL转485模块(附完整电路图)
  • 2026年酒店咖啡机设备厂商深度评测:谁在定义商用场景的新标准? - 优质品牌商家
  • 基于西门子plc的高炉运矿皮带拣铁装置的控制系统设计31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_可以扫码
  • paperxie 论文格式不用死磕 Word,四千院校模板一键标准化排版
  • 2026年防爆控制柜品牌选择指南:专业能力与市场格局深度分析 - 优质品牌商家
  • 2026佛山市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐
  • 2026年声光报警器品牌厂家哪家靠谱?深度评测行业格局与技术趋势 - 优质品牌商家
  • 微信聊天记录导出完整指南:3步备份你的珍贵数字记忆 [特殊字符]️
  • 2026年比较好的陕西节能系统门窗/系统门窗定制/封阳台系统门窗/断桥铝系统门窗实力工厂推荐 - 品牌宣传支持者
  • 机器学习在拓扑分类中的捷径学习现象解析
  • SAP COOIS/COOISPI报表选择条件自定义实战:从界面增强到取数逻辑的完整配置流程
  • 2026年知名的断桥铝门窗/山西断桥铝门窗/定制断桥铝门窗稳定供货厂家推荐 - 行业平台推荐
  • 黄金比例与神经认知系统的信息平衡机制
  • 密钥池托管技术:底层 API Key 全加密存储,业务方看不到原生密钥
  • 2026年6月当下评价高的栏杆批发厂家推荐,景区石凉亭/庭院石凉亭/荔枝面青石板/石雕牌楼/石材护栏,栏杆门店选哪家 - 品牌推荐师
  • Android进程永生终极方案:基于Linux内核的黑科技保活技术突破
  • 基于B2B平台的医疗病历交互系统 | 毕业设计完整源码