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交出控制权处理数据线程基本上没有解算过程。。。。急求助!!!!!! 展开
1 接收事件触发接收过程,进行数据预处理
2 数据预处理后,发出自定义事件或者消息触发数据解算线程,解算最大耗时200-250ms,最小100ms
3 解算后的数据发出,其时间包括在2中的最大耗时时间内
sleep在解算线程中基本上无效。采用线程里面加application.processmessage交出控制权处理数据线程基本上没有解算过程。。。。急求助!!!!!! 展开
展开全部
按照你提供的信息,除非你优化处理的过程,否则,根本不可能实现对实时性的要求
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种问题必须要使用多线程处理,
你可以用线程池来处理,这个开销比新创建线程要小一些,需要你自己写一个线程池处理(重点是可以快速取到空闲线程),
关于你自己的问题
1 接收事件触发接收过程,进行数据预处理
我不知道你的预处理是否是必须的,而且必须是在线程处理之前完成,
我认为接收事件触发接收过程,收到数据马上放入主线程(也就是我说的线程池管理线程),之后你的进程继续等待下一波数据,而子线程开始处理数据。
2 数据预处理后,发出自定义事件或者消息触发数据解算线程,解算最大耗时200-250ms,最小100ms
没必要定义什么自定义消息,你可以在主线程中,等待子线程完成计算,然后做最后的处理。
3 解算后的数据发出,其时间包括在2中的最大耗时时间内
计算后的数据需要发出? 那一样的道理,按照顺序发出即可。
你可以用线程池来处理,这个开销比新创建线程要小一些,需要你自己写一个线程池处理(重点是可以快速取到空闲线程),
关于你自己的问题
1 接收事件触发接收过程,进行数据预处理
我不知道你的预处理是否是必须的,而且必须是在线程处理之前完成,
我认为接收事件触发接收过程,收到数据马上放入主线程(也就是我说的线程池管理线程),之后你的进程继续等待下一波数据,而子线程开始处理数据。
2 数据预处理后,发出自定义事件或者消息触发数据解算线程,解算最大耗时200-250ms,最小100ms
没必要定义什么自定义消息,你可以在主线程中,等待子线程完成计算,然后做最后的处理。
3 解算后的数据发出,其时间包括在2中的最大耗时时间内
计算后的数据需要发出? 那一样的道理,按照顺序发出即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询