社区
Delphi
帖子详情
关于线程!
Antiquesoft
2005-11-26 04:20:47
线程在执行一个长时间的操作/循环时使用,如果是收数据的速度很快,保存数据的速度相对慢的话,最主要的不是用几个ADOQuery而是如何将这发来的数据快速接收。你的串口一秒能来多少数据呀!
要不还是开一个缓冲区,将串口来的数据全部先保存到缓冲区中,然后开一个线程,线程时创建一个ADOQuery将缓冲区数据保存。这样你的数据来的在快也没有关系了。
在坛子里看到一位仁兄以上见解,小兄弟尚有不解之处!
能否以一段代码来说明?
...全文
192
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
打赏
举报
回复
开缓冲区,如果你的存数据的速度一直很满的话,那是不是你的缓冲区的越来越大,会不会导致溢出,或数据丢失.
WPF多
线程
演示
每个
线程
都有一个 Apartment State,对于UI
线程
,它是STA(Single Threaded Apartment),非UI
线程
通常是MTA(Multi Threaded Apartment)。使用Dispatcher.Invoke 或 BeginInvoke 方法可以确保在正确的
线程
上执行UI...
Android应用程序消息处理机制
Android应用程序主
线程
是一个特殊的
线程
,因为它同时也是UI
线程
以及触摸屏、键盘等输入事件处理
线程
。主
线程
对消息循环很敏感,一旦发生阻塞,就会影响UI的流畅度,甚至发生ANR问题。这个PPT讲Android应用程序
线程
...
Python运维之多
线程
!!
Python运维之多
线程
:多
线程
编程之threading模块、多
线程
同步之Lock(互斥锁)、多
线程
同步之Semaphore(信号量)、多
线程
同步之Condition、多
线程
同步之Event、
线程
优先级队列(queue)、多
线程
之
线程
池pool。
C#
线程
- 简介
线程
就是给你的程序后台处理任务的,
线程
越多,处理的效率就越快(就好比如人多力量大一样),当然,也会消耗更多的内存去运行这些工作的
线程
! 如何定义单
线程
? 不需要定义,我们平常事就会用得到! 例如控制台输出...
java
线程
说法错误的是什么_【多选题】在java程序中,下列关于
线程
的说法错误的是() A.
线程
启动调用start方法 B.
线程
的主体是run方法 C.
线程
运行中调用sleep方法可以进入阻塞...
【多选题】在java程序中,下列关于
线程
的说法错误的是()A.
线程
启动调用start方法 B.
线程
的主体是run方法 C.
线程
运行中调用sleep方法可以进入阻塞状态 D. 定义
线程
只能通过定义类继承Thread类的方法更多相关问题等...
Delphi
5,930
社区成员
262,936
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章