news 2026/6/13 3:44:54

数据入队模块的-ExeModule

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据入队模块的-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 消费者。队列满时自动丢弃最旧数据,防止内存无限增长。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 3:39:52

<p>抚顺的街头巷尾,贵金属回收店铺星罗棋布,从黄金、白银到铂金,各类回收需求日益旺盛。为了帮大家拨云见日,找到真正靠谱的服务商,小编不辞辛劳,精心梳理了一份关于抚顺本地诚信回收店铺的参考指南。以下便

福州作为福建省的省会城市&#xff0c;贵金属回收市场向来鱼龙混杂&#xff0c;不少市民在出手黄金、白银或铂金时&#xff0c;最怕遇到压价、扣秤甚至调包等糟心事。为了方便大家找到真正靠谱的回收渠道&#xff0c;小编特意实地探访并多方核实&#xff0c;整理出一份关于福州…

作者头像 李华
网站建设 2026/6/13 3:37:59

ACE2005数据集事件抽取实战:用Transformers库跑通第一个Demo

ACE2005数据集事件抽取实战&#xff1a;零基础快速搭建第一个模型刚接触NLP事件抽取时&#xff0c;面对复杂的论文和数据集总让人望而却步。今天我们就用最直接的方式&#xff0c;带你在30分钟内基于ACE2005数据集跑通第一个事件抽取模型。不需要理解繁琐的理论&#xff0c;只需…

作者头像 李华
网站建设 2026/6/13 3:35:54

2025年周口工商年报怎么选?避开这5个常见误区

当经营者搜索“求推荐周口工商年报公司”时&#xff0c;往往已经意识到年报公示并非简单填表&#xff0c;而是一项涉及合规风险、时间节点和财务数据准确性的正式申报行为。工商年报是市场主体通过国家企业信用信息公示系统向监管部门报送上一年度经营状况的法定义务&#xff0…

作者头像 李华
网站建设 2026/6/13 3:28:57

从分钟线到年线:一份超全的Ptrade get_price参数配置指南与避坑清单

从分钟线到年线&#xff1a;一份超全的Ptrade get_price参数配置指南与避坑清单 在量化交易的世界里&#xff0c;数据就像燃料&#xff0c;而获取数据的接口则是引擎。Ptrade作为国内主流量化交易平台之一&#xff0c;其 get_price 接口是开发者获取历史行情数据的核心工具。…

作者头像 李华