delphi多线程怎么解决数据处理速度跟不上数据接收的速度?

数据接收正常,但是要求实时性比较高。例如1s内需要接收30包数据(每包30字节,平均30ms一包数据),都能接收准确,但是接收后的数据处理耗时大概200-250ms之间,... 数据接收正常,但是要求实时性比较高。例如1s内需要接收30包数据(每包30字节,平均30ms一包数据),都能接收准确,但是接收后的数据处理耗时大概200-250ms之间,采取多线程应该如何才能解决数据的同步计算?希望给出例程(程序不能占用cpu70%以上)。本人解决思路(可运行,程序处于假死,cpu占用长时间100%,汗)抛砖引玉:
1 接收事件触发接收过程,进行数据预处理
2 数据预处理后,发出自定义事件或者消息触发数据解算线程,解算最大耗时200-250ms,最小100ms
3 解算后的数据发出,其时间包括在2中的最大耗时时间内

sleep在解算线程中基本上无效。采用线程里面加application.processmessage交出控制权处理数据线程基本上没有解算过程。。。。急求助!!!!!!
展开
 我来答
renzhumin2
2011-07-15 · TA获得超过163个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:270万
展开全部
如果如你的要求,解算要100ms以上。服务器预处理,用自定义事件去处理,或者单线程,100%这程序要崩溃。
你只能两种方法。
1.每接收一个数据包,创建一个线程去处理。
2.解算现成只从池里面取数据:即预处理的数据后,添加到数据池(解算现成可以单个或多个)

另外,sleep在线程是中互不影响的,只影响当前线程。
kcxnvbdbd
2011-07-15 · TA获得超过523个赞
知道小有建树答主
回答量:885
采纳率:50%
帮助的人:605万
展开全部
按照你提供的信息,除非你优化处理的过程,否则,根本不可能实现对实时性的要求
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
极天异云
2011-07-15 · TA获得超过1054个赞
知道小有建树答主
回答量:1170
采纳率:42%
帮助的人:386万
展开全部
这种问题必须要使用多线程处理,
你可以用线程池来处理,这个开销比新创建线程要小一些,需要你自己写一个线程池处理(重点是可以快速取到空闲线程),
关于你自己的问题
1 接收事件触发接收过程,进行数据预处理
我不知道你的预处理是否是必须的,而且必须是在线程处理之前完成,
我认为接收事件触发接收过程,收到数据马上放入主线程(也就是我说的线程池管理线程),之后你的进程继续等待下一波数据,而子线程开始处理数据。
2 数据预处理后,发出自定义事件或者消息触发数据解算线程,解算最大耗时200-250ms,最小100ms
没必要定义什么自定义消息,你可以在主线程中,等待子线程完成计算,然后做最后的处理。

3 解算后的数据发出,其时间包括在2中的最大耗时时间内
计算后的数据需要发出? 那一样的道理,按照顺序发出即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式