发布网友
共2个回答
热心网友
没见过你所说的程序,这样的描述没法提供准确的建议。
一般大量数据的处理,应该写在线程里,通常不会和采集线程放在一起,应该新开线程。
如果数据处理后是为了显示,那么显示应该是在OnDraw/OnPaint里面,这里最好使用内存DC做缓冲;如果是直接给控件,那么通常可以线程中直接发送给控件,也可以在定时器里面获取数据发送给控件。
这里要看处理数据的耗时了,如果耗时不多,那么直接在定时器中定时处理和发送就可以了(比如在OnInitDialog里面SetTimer(1,1000); 在OnTimer里面处理即可)
热心网友
问题太笼统了。一般来说一个完整的实时监控系统会包括这么几部分:
1、数据采集,通过各种接口获取各个设备的运行参数或者状态
2、数据展示,通过监控界面向管理人员呈现各个设备的运行状态
3、数据存储,把采样数据保存到存储系统,以备后查
我不清楚你是在采集上遇到问题还是后续处理上遇到问题。我把各个部分大概说一下吧
采集模块,专门负责数据采集,它通过网络接口或者comm接口从各个设备获取实时数据。大型系统中通常会在多台工控机上部署多个采集模块,以提高采集频率。
采集的数据需要呈现给用户看,如果采集模块直接把数据发送到客户端,则程序耦合度太高,一般情况下,采集模块会首先把采集到的实时数据写入实时数据库(RTDB),然后展示模块从RTDB获取各个点位的实时数据。开源的RTDB可以看下 spdata-rtdb
至于历史数据存储,关系数据库是无法胜任的。主流的RTDB自带了历史数据存储功能,但是那些RTDB通常很贵,一般得上百万一套。也可以选择TSDB(时序数据库)来存储历史数据。