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

数据出队模块的-ExeModule

ExeModule()方法逐段解析

整体角色

这个模块叫“数据出队”,它的核心职责是:从一个全局共享队列中取出数据,暴露为本模块的输出参数,供下游模块使用。


1. 入口计时

Stopwatch.Restart();

重启一个秒表,用于性能监控/调试,记录本次执行耗时。


2. 防御性校验

if(string.IsNullOrEmpty(QueueKey)){...returnfalse;}if(!Solution.Ins.QueueDic.ContainsKey(QueueKey)){...returnfalse;}
  • QueueKey是队列的名称标识(默认"QueueDefault"),不能为空。
  • Solution.Ins.QueueDic是一个全局字典,存着整个解决方案里所有的队列实例。这里检查这个 key 对应的队列是否存在。

3. 阻塞等待模式(IsWait

if(IsWait){varsignal=Solution.Ins.QueueSignDic[QueueKey];// 取出这个队列对应的"信号量"boolhasData=false;lock(outQueue){// 遍历所有启用的槽位,看有没有数据foreach(varslotinQueueSlots.Where(s=>s.IsEnable))if(GetSlotCount(outQueue,slot)>0){hasData=true;break;}}if(!hasData)signal.WaitOne(TimeOut);// 阻塞等待,直到有人"发信号"或超时}

这里的关键概念:

  • QueueSignDic是一个Dictionary<string, AutoResetEvent>,每个队列配一个AutoResetEvent(一种线程同步信号)。
  • IsWait = true时,模块不会立即失败,而是先检查队列里有没有数据。
  • 如果所有槽位都为空,就调用signal.WaitOne(TimeOut)— 当前线程阻塞在这里,直到:
    • 另一个模块(比如 DataIn 入队模块)往队列里放数据后调用了signal.Set(),或者
    • 超时时间TimeOut(默认5000毫秒)到了。

这实现了一个生产者-消费者模式:入队模块生产数据并 Set 信号,出队模块 WaitOne 等待消费。


4. 从每个槽位取数据

lock(outQueue){foreach(varslotinQueueSlots.Where(s=>s.IsEnable)){intcount=GetSlotCount(outQueue,slot);if(count==0){if(!IsIgnoreError)// 不忽略错误 → 报错返回{...returnfalse;}continue;// 忽略错误 → 跳过这个槽位}slot.LastValue=GetSlotValue(outQueue,slot);// 取最后一个值}}
  • QueueSlots是一个槽位列表,每个槽位有:索引(SlotIndex)、名称(SlotName)、数据类型(DataType)。
  • GetSlotCount:根据槽位索引和数据类型,拿到内部List<T>的元素个数。
  • IsIgnoreError控制行为:
    • true(默认):某个槽位没数据就跳过,继续处理下一个。
    • false:某个槽位没数据就直接报 NG,整个模块执行失败。
  • GetSlotValue:取队列最后一条数据,赋值给slot.LastValue。如果IsDeleteData = true,取数据的同时还会把它从队列中移除(消费掉)。

5. 输出参数 & 状态

AddOutputParams();ChangeModuleRunStatus(eRunStatus.OK);returntrue;

AddOutputParams()把每个槽位的LastValue注册为模块的输出参数(名称用SlotName,类型用DataType),这样下游模块就能通过连线拿到这些值。


一句话总结

这个方法就是一个带超时等待的队列消费者:它从全局共享队列的各个槽位里取出最新数据,转成模块的输出参数,并支持"有数据才继续 / 没数据就等"的同步模式。

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

相关文章:

  • 突破网盘限速:开源直链解析工具的技术架构与应用实践
  • LLM智能体在社交模拟中的决策行为分析:有限状态与LLM-based策略对比研究
  • 2026年聚氨酯制品选购实战指南:从材料参数到供应商能力全解析 - 优质品牌商家
  • 如何彻底解决Windows多显示器窗口错位问题:PersistentWindows完整指南
  • 2026年深圳铝合金激光焊接厂家推荐榜单:铝制品/金属/钣金/全自动激光焊接工艺与技术实力深度解析 - 品牌发掘
  • 跟着 MDN 学JavaScript day_24:JavaScript对象基础完全指南
  • 数据入队模块的-ExeModule
  • 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年比较好的陕西节能系统门窗/系统门窗定制/封阳台系统门窗/断桥铝系统门窗实力工厂推荐 - 品牌宣传支持者
  • 机器学习在拓扑分类中的捷径学习现象解析