社区
Delphi
帖子详情
关于线程!
Antiquesoft
2005-11-26 04:20:47
线程在执行一个长时间的操作/循环时使用,如果是收数据的速度很快,保存数据的速度相对慢的话,最主要的不是用几个ADOQuery而是如何将这发来的数据快速接收。你的串口一秒能来多少数据呀!
要不还是开一个缓冲区,将串口来的数据全部先保存到缓冲区中,然后开一个线程,线程时创建一个ADOQuery将缓冲区数据保存。这样你的数据来的在快也没有关系了。
在坛子里看到一位仁兄以上见解,小兄弟尚有不解之处!
能否以一段代码来说明?
...全文
188
6
打赏
收藏
关于线程!
线程在执行一个长时间的操作/循环时使用,如果是收数据的速度很快,保存数据的速度相对慢的话,最主要的不是用几个ADOQuery而是如何将这发来的数据快速接收。你的串口一秒能来多少数据呀! 要不还是开一个缓冲区,将串口来的数据全部先保存到缓冲区中,然后开一个线程,线程时创建一个ADOQuery将缓冲区数据保存。这样你的数据来的在快也没有关系了。 在坛子里看到一位仁兄以上见解,小兄弟尚有不解之处! 能否以一段代码来说明?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luxuewei5214
2005-12-08
打赏
举报
回复
不论怎么说,我感觉串口还是个低速I/O,想让他达到nMB/s的速度是不大可能的吧
ZyxIp
2005-12-03
打赏
举报
回复
对于Com口来说是有点夸张。只是举个例子。
固定数组是最好的,刚才也准备说用固定数组,只是用动态数组说明这个问题更简单一些。
固定数组的好处是一次分配好内存以后不用在浪费分配的时间,释放时也更容易。
固定数组的问题在于添加和删除时因为是多个线程,所以有同步的问题,如果用了同步线程的方式则会浪费时间,所以要技巧性的解决。用固定数组实现一个从头开始添加从尾开始删除的队列可以解决要维护两个游标A,B,都初始化为数组最大索引号,收到一条数据将它保存到A位置,然后Inc(A,-1);
保存B位置的数据后Inc(B,-1); 如果A=B则说明缓冲区中没有数据. 游标A<0后如果B=最大索引号则说明缓冲区满了,否则A=最大索引号。
当然将缓冲区的操作要封装成一个对象。可以将它写一个为适合任何大小的结构体。
关于双向队列可以找本《数据结构》来看看。
快乐老猫
2005-12-03
打赏
举报
回复
1.不建议用数组,固定数组浪费空间,数据挪移不方便,需要用独立变量做标志。动态数组的反复开辟也消耗时间,建议用链表方式,如TLIST。
2.楼上的数据采集有点夸张,目前COM口最大的传输速度应该是115Kbps吧,也就是说1秒中最多11K BYTE左右的信息量。
ZyxIp
2005-12-03
打赏
举报
回复
这话就好象是我回复的。
ZyxIp
2005-12-03
打赏
举报
回复
来代码就不用了吧!一时还找不到现成的代码。
如:串口Com_A收到的数据为如是下的结构
TComDataInfo=Record
Name:String[255];
Field1:Integer;
end;
每2毫秒会收到这样的一条数据
要将所有收到的数据保存到表 Table_B 中,如果保存数据的时间为5毫秒.
则可能收到的数据没有保存新的数据就又来了,而且还会造成程序无法操作象死机一样。
所以可以先定义一个数组: ComDataArr:Array of TComDataInfo;
所有收到的数据先保存到这个数组中,所以不会造成数据的丢失。
创建一个线程,总是在检查ComDataArr数组的长度发现有数据就保存到Table_B中。也就不会造成程序无法操作。
当然如果收数据的速度比较慢,直接保存就可以了。
如果数据来的更快,如网络游戏中服务器端的程序,因为同时有非常多的玩家发消息上来,就要用端口映射的方式,让系统帮你直接将收到的数据放到你所开辟的的内存中比上面的方式省了复制的时间。
当然也有可能缓冲区会满,所以要合理定义缓冲区,添加内存或者给发数据的一方通知让暂停发送。
这些都是要根据收取数据的速度处理的速度来选择用什么样的方法。
hmzgz81
2005-11-27
打赏
举报
回复
开缓冲区,如果你的存数据的速度一直很满的话,那是不是你的缓冲区的越来越大,会不会导致溢出,或数据丢失.
POSIX多
线程
程序设计.pdf
内容简介 《POSIX多
线程
程序设计》深入描述了IEEE的开放系统接口标准——POSIX
线程
,通常称为Pthreads标准。本书首先解释了
线程
的基本概念,包括异步编程、
线程
的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、
线程
私有数据和实时调度。此外,本书还讨论了调度的问题,并给出了避免错误和提高性能等问题的有价值的建议。本书使用了大量注释过后 实例来解释实际的概念,并包括Pthreads的简单索引和对标准化的展望。 《POSIX多
线程
程序设计》适合有经验的C语言程序员阅读,也适合多
线程
人员参考。
WPF多
线程
演示
WPF多
线程
演示
Android多
线程
文件夹下载及断点续传
Android实现网络多
线程
下载,断点续传,压缩包内有两个项目: downloadDemo:多
线程
下载 MulThreadDownloader:断点续传(网上别人的项目)
libevent多
线程
libevent多
线程
, 参考mariotcp 参考http://blog.csdn.net/i_am_jojo/article/details/7587838流程图
java
线程
课程代码,很有用的,有注释哦
java
线程
课程代码,很有用的,有注释哦
Delphi
5,928
社区成员
262,931
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章