zhujf 发表于 2021-8-24 10:04

有会Delphi语言的朋友吗?求助个问题!

    请教下大神们,我想实现以下功能: 程序每秒接收到一个数据, 以当前系统时间为终点,取5分钟前的数据,程序该如何实现呢?随着系统时间的增加变化,5分钟内的数据也必须随着系统时间更新,懂delphi的大神们,帮帮忙贴段代码帮帮我,谢谢!

sail2000 发表于 2021-8-24 10:04

本帖最后由 sail2000 于 2021-8-24 10:42 编辑

不知道每个数据多大,感觉可以用 TList 装入数据,
PDataItem = ^TDataItem;
TDataItem = record
ATime: TDateTime;//接收时间
AData: data;//你的数据
end;
每秒接收的数据放进这个结构,再放进 TList,开一个线程不断去检查这个 TList 的数据包含的时间。

另外一个想法,如果确定是每秒是准确的话,5分钟就是 300 个数据,那么可以每 inc 到 300 条数据就取第一条?

pzx521521 发表于 2021-8-24 10:20

如果你用的是XE以上可以直接用 Generics.Collections 下的 TQueue 这个是一个先进先出的array
如果不是自己实现一下先进先出的队列

生成一个 5*60 -> 300 的 TQueue,
程序每秒接收到一个数据 -> 收到后放到 TQueue(Enqueue )如果大于300个了就Dequeue
取5分钟前的数据->TQueue.Peek, 默认取到的就是第一个

sikro 发表于 2021-8-24 10:23

难得现在还有在用Delphi的

zhujf 发表于 2021-8-24 10:30

pzx521521 发表于 2021-8-24 10:20
如果你用的是XE以上可以直接用 Generics.Collections 下的 TQueue 这个是一个先进先出的array
如果不是自 ...

朋友,我用的是Delphi 7,能帮忙写段代码么?谢谢!

pzx521521 发表于 2021-8-24 10:37

zhujf 发表于 2021-8-24 10:30
朋友,我用的是Delphi 7,能帮忙写段代码么?谢谢!

这个分数很难的啦

erui 发表于 2021-8-24 11:09

都是DELPHI高手呀,现在的最新版Delphi,我都不会用了,更新的太多了。

comeheres 发表于 2021-8-24 11:43

用数据库吧,一个线程专门负责接收每秒发过来的数据,再带上时间字段存入数据库,另一个线程就专门取5分钟前的数据

gfs 发表于 2021-8-29 21:37

erui 发表于 2021-8-24 11:09
都是DELPHI高手呀,现在的最新版Delphi,我都不会用了,更新的太多了。

新的delphi 比delphi7方便多了
页: [1]
查看完整版本: 有会Delphi语言的朋友吗?求助个问题!